使用session-state的web服务使用cookieless = true

时间:2014-04-10 09:46:56

标签: asp.net web-services session-state webmethod cookieless

在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),表示该对象已被移动:

enter image description here

2 个答案:

答案 0 :(得分: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();
    }
}

答案 1 :(得分: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重定向响应。