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

检查 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 回答
0

Microsoft 文章描述了此问题:http: //msdn.microsoft.com/en-us/library/aa480509.aspx

来自客户端的调用必须捕获 WebException,并更新 Web 服务的 URL,其中必须包含 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 回答