今天在帮助同事解决对WebService进行 Web References 调用问题:当调用webservice第一个方法Method1发现服务端Set-Cookie: ASP.NET_SessionId=*****保存了ASP.NET的会话状态。接着当我再调用webservice的第二个方法Method2时发现没法正确返回服务器端处理结果html
也就是说webservices进行http post 的时没法正常响应服务端。感受问题就出在cookie上(Method1调用时服务端进行了Set-Cookie),可是就是始终解决不了问题。接着测试webservices浏览器端访问,一切都是正常的。只怪本身对WebService了解甚少,致使明明知道问题所在,就是没法解决问题。。web
技术问题每每都是这样,当你越想解决它,它就越难快速的被你搞定。因而乎下班回家后冲凉、吃饱后继续尝试解决问题。我忽然想到了long long ago 俺写过一篇文章,就是http抓包的文章,文章地址在这里:http://www.cnblogs.com/ryanding/archive/2011/01/17/1936392.html。主要是经过HttpWebRequest、
HttpWebResponse 这两大神器来解决问题。后来想一想这样作确定能够搞定这个问题。可是仍是稍微过于繁琐了。记得
HttpWebRequest 有一个
CookieContainer对象,能够解决cookie问题。因而乎就拼命的在WebServcie的Web References实例化对象上找相关属性。最终完美的被我解决了,代码以下:
浏览器
ConsoleApplication1.WebReference.YourWebServiceName proxy= new ConsoleApplication1.WebReference.YourWebServiceName(); System.Net.CookieContainer Cookies = new System.Net.CookieContainer(); proxy.CookieContainer = Cookies;
代码执行完以上信息在执行Method1,由于这玩意才开始 Set-Cookie...服务器
接着在执行Method2一切都OK了。cookie
这说明了 proxy.CookieContainer存储了客户端的 ASP.NET_SessionId。这样之后每次经过webservice 方法调用时,都会将ASP.NET_SessionId传递到服务器端。post
注:该WEBSERVICES 是客户提供的,咱们不能随便修改它的代码。测试
我想应该也有很多人遇见了相似的问题。本文权当方便后来人吧。spa