webService启用cookie的另一种方法

很多时候,我们希望用到asp.net的membership,这样就可以快速的处理角色验证之类的问题。而且客服端能够与bs系统共用一套账户。

webservice里面的proxy类继承自WebClientProtocol,而在WebClientProtocol里面包含两个方法

protected virtual WebRequest GetWebRequest(Uri uri);

protected virtual WebResponse GetWebResponse(WebRequest request);

我们应该很清楚,调用webservice本质上也是一个http的Post请求,和普通的html不一样的是,webservice请求的内容和服务返回的内容不是html,而是xml(soap协议)。再看这两个方法,所以proxy在调用service的时候,肯定会调用到这两个方法。所以,我们只要进行适当的重写这两个方法就OK了。

private static string currentCookie = string.Empty;

        protected override WebRequest GetWebRequest(Uri uri)

        {

            WebRequest request = base.GetWebRequest(uri);

            if (!string.IsNullOrEmpty(currentCookie))

            {

                request.Headers[HttpRequestHeader.Cookie] = currentCookie;

            }

            return request;

        }

        protected override WebResponse GetWebResponse(WebRequest request)

        {

            WebResponse response = base.GetWebResponse(request);

            if (!string.IsNullOrEmpty(response.Headers[HttpResponseHeader.SetCookie]))

                currentCookie = response.Headers[HttpResponseHeader.SetCookie];

            return response;

        }

我们直接从http请求的header里面去截取cookie,在放送之前,在Request的header上附加上cookie。

服务端,web.config需要配置一下,

<system.webServer>

    <modules runAllManagedModulesForAllRequests="true" />

  </system.webServer>

启用所有module通道,这样就会进行权限验证。

你可能感兴趣的:(webservice)