What's the error? And why is your XmlDocument "global"? You realize that more than one person could call this method concurrently, don't you? Your current method will invariably break because someone may get someone else's data since the variable reference could change mid-execution (since a CPU slices time between threads and processes). Besides, your web application can't access a file on the client machine like that! That just isn't possible. In order to do that, you would have to either specify a path on the server or upload the document to the web server first. This doesn't have to be persistent, however. You could pass a stream that the web service would save to a file. Actually, though, a web server is probably not a good solution for your problem if all you're trying to do is upload a file. Simple HTTP can handle this easier than SOAP. You'd simply make a new HttpWebRequest, get the request stream, and pass the file. The handler on the server would get this stream and save it to a directory, passing back an HttpWebResponse that tells if it was successful or not. Be careful with this kind of solution, however, since the user your web application runs as (by default, this is ASPNET for ASP.NET and IUSR_YOURCOMPUTERNAME for IIS itself) will need write permissions. This means anyone could upload anything and could potentially upload - say - a .aspx file that deletes most of your hard drive! This is where you should try impersonation (even with the web service, which gets a little harder but isn't too bad) using the HttpWebRequest.Credentials property (and disabling anonymous access on the web server with something else enabled like Windows Integrated Authentication), or the WebClientProtocol.Credentials property, which your web service consumer class inherits.
Microsoft MVP, Visual C# My Articles