0

次のような Web サービス メソッドでセッションを有効にします。

[WebMethod(EnableSession=true)]
public string HelloWorld()
{
    return "Hello World";
}

Cookie のないセッション状態 (web.config) を使用します。

<sessionState cookieless="true"></sessionState>

次に、次のようにクライアントから呼び出してみます。

localhost.WebService1 ws1 = new localhost.WebService1();    // the web service proxy        
ws1.HelloWorld();

オブジェクトが移動されたことを示すリダイレクト WebException (302) が発生します。

ここに画像の説明を入力

4

2 に答える 2

0

Microsoft の記事でこの問題について説明しています: http://msdn.microsoft.com/en-us/library/aa480509.aspx

クライアントからの呼び出しは、WebException をキャッチし、URL を Web サービスに更新する必要があります。これには、Web サーバーによって生成された sessionId が含まれている必要があります。次に、メソッドへの呼び出しを繰り返します。

localhost.WebService1 ws1 = new localhost.WebService1();    // the web service proxy    
try {
    ws1.HelloWorld();
} catch (WebException ex) {
    HttpWebResponse response = (HttpWebResponse)ex.Response;
    if (response.StatusCode == HttpStatusCode.Found) {
        ws1.Url = new Uri(new Uri(ws1.Url), response.Headers["Location"]).AbsoluteUri;
        ws1.HelloWorld();
    }
}
于 2014-04-10T09:46:55.557 に答える
0

SoapHttpClientProtocol のドキュメントを確認すると、プロパティ「AllowAutoRedirect」のデフォルト値は false です。

http://msdn.microsoft.com/en-us/library/system.web.services.protocols.httpwebclientprotocol.allowautoredirect%28v=vs.110%29.aspx

Web メソッドを呼び出す前に true に変更すると、302 http リダイレクト応答が自動的に処理されます。

于 2014-04-10T10:06:25.110 に答える