Проблема в том, что клиент WCF не учитывает куки-файл сервера (не устанавливает его при следующем запросе). Вот как я создаю клиента:
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;
}
}
}
}