Я потратил большую часть дня, пытаясь понять это ... Я закончил тем, что написал службу WCF, чтобы смоделировать настройку cookie и отправить ее как часть OperationContract (хотя это плохая практика, Практически, поскольку WCF не является только HTTP).
Первоначально я думал, что инспекторы сообщений будут делать трюк, однако после нескольких часов повторения кода я в конечном итоге написал собственный класс WebClient, чтобы «имитировать» ссылку на службу, что позволило мне увидеть заголовки в CookieContainer.
Итак, пробовав все эти разные идеи и нарисуя страницы и страницы кода, как обычно, я пытаюсь сделать что-то, чего раньше не делал, наткнулся на статью в google (в то время как искал что-то совершенно отличное от оригинала проблема):
http://megakemp.com/2009/02/06/managing-shared-cookies-in-wcf/
Прочитайте раздел (Ad-Hoc управление печенья), вот моя реализация (с помощью тест-службы, который я создал, чтобы имитировать вашу проблему). Вы могли бы сделать больше вменяемости/ошибки проверки на участке, где я вновь собрать печенье из строки заголовка ...
List<string> strings = null;
// Using Custom Bindings to allow Fiddler to see the HTTP interchange.
BasicHttpBinding binding = new BasicHttpBinding();
binding.AllowCookies = true;
binding.BypassProxyOnLocal = false;
binding.ProxyAddress = new Uri("http://127.0.0.1:8888");
binding.UseDefaultWebProxy = false;
EndpointAddress url = new EndpointAddress("http://192.168.20.4:42312/Classes/TestService.svc");
using (TestServiceClient client = new TestServiceClient(binding,url))
{
using (new OperationContextScope(client.InnerChannel))
{
strings = new List<string>(client.WSResult());
HttpResponseMessageProperty response = (HttpResponseMessageProperty)OperationContext.Current.IncomingMessageProperties[HttpResponseMessageProperty.Name];
CookieCollection cookies = new CookieCollection();
foreach (string str in response.Headers["Set-Cookie"].ToString().Split(";".ToCharArray()))
{
Cookie cookie = new Cookie(str.Split("=".ToCharArray())[0].Trim(), str.Split("=".ToCharArray())[1].Trim());
cookies.Add(cookie);
}
}
}
Это довольно тупой API. Заголовки SOAP следует использовать вместо файлов cookie. Заголовки SOAP могут использоваться независимо от базового транспортного протокола, но файлы cookie будут работать только с HTTP. –