問題是WCF客戶端不尊重服務器cookie(不會在下一個請求中設置它)。下面是我如何創建客戶端:WCF REST WebHttpBinding cookie處理
WebChannelFactory<IPostService> factory = new WebChannelFactory<IPostService>(
new WebHttpBinding() {AllowCookies = true},
new Uri("http://10.6.90.45:8081"));
_proxy = factory.CreateChannel();
設置AllowCookies假也沒有效果。
我現在所做的是寫一個簡單的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;
}
}
}
}
謝謝,但它並沒有說我什麼都不知道。你必須編寫你自己的IClientMessageDispatcher,這正是我現在使用的。我正在尋找_automatic_ cookie管理,就像在HttpWebRequest中一樣。服務器發送一個cookie,客戶端接受該cookie,並在下一個請求中將其發送回服務器。平常的網絡模式,沒有特別的邏輯。在沒有自定義檢查器的情況下,WCF是可以實現的嗎? – 2011-03-23 16:44:12
我沒有太多關於wcf cookies的知識..我只是在閱讀它。我閱讀這篇文章http://megakemp.wordpress.com/2009/02/06/managing-shared-cookies-in-wcf/可以解決你的問題 – Annie 2011-03-24 11:27:12