ASP.NET WebService 中使用 ASP.NET_SessionId

     今天在幫助同事解決對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


原文連接: http://www.cnblogs.com/ryanding/archive/2011/09/15/2178146.html
相關文章
相關標籤/搜索