问题是WCF客户端不尊重服务器cookie(不在下一个请求中设置它)。以下是我创建客户端的方法:
WebChannelFactory<IPostService> factory = new WebChannelFactory<IPostService>(
new WebHttpBinding() {AllowCookies = true},
new Uri("http://10.6.90.45:8081"));
_proxy = factory.CreateChannel();
设置AllowCookies为false也没有效果。
我现在所做的是编写了一个简单的IClientMessageInspector来在请求之间保留服务器cookie,但我真的不想这样做,应该有一种方法以标准方式处理cookie。
我现在正在使用的自定义检查器,它按预期工作,但我正在寻找一个“干净”的解决方案:
public class CookieInspector : IClientMessageInspector
{
private string _cookie;
public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
if(_cookie != null && request.Properties.ContainsKey("httpRequest"))
{
HttpRequestMessageProperty httpRequest = request.Properties["httpRequest"] as HttpRequestMessageProperty;
if(httpRequest != null)
{
httpRequest.Headers["Cookie"] = _cookie;
}
}
return null;
}
public void AfterReceiveReply(ref Message reply, object correlationState)
{
if (reply.Properties.ContainsKey("httpResponse"))
{
HttpResponseMessageProperty httpResponse = reply.Properties["httpResponse"] as HttpResponseMessageProperty;
if(httpResponse != null)
{
string cookie = httpResponse.Headers.Get("Set-Cookie");
if (cookie != null) _cookie = cookie;
}
}
}
}
答案 0 :(得分:0)
How to add cookie on a HttpTransportBindingElement 看到这个页面它可以完整回答你的问题
答案 1 :(得分:0)
不知道这是在最近的.NET版本中是“修复”的(我是4.5版),或者如果OP有其他问题导致无法正常工作,但allowCookies设置是否可以用于此目的
它对我有用....我也在服务器上设置了“aspnetcompatabilitymode”。
<webHttpBinding>
<binding name="webHttpEndpointBinding" allowCookies="true">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows"/>
</security>
</binding>
</webHttpBinding>