we exclusively use this sort of technique to deploy reports due to restrictions on access. developers have their own local reporting services, and we all have a shared one in the dev environment. to get things to QA and LIVE, we had to do just as was shown... a console app based around the web service.
for the "target", we're using from the 2005 wsdl:
- .CreateFolder and .DeleteItem to manage the structure on the report server
- .CreateReport, .CreateDatasource, .CreateResource to populate the contents of individual folders, and .DeleteItem to delete them (that method takes a string representing the path to the item on the RS, so it works for both folders and the contents within)
and from the "source" side,
- System.IO.MemoryStream to read off disk and get into a byte() to feed into .CreateReport