2010-11-30 1 views
3

У меня есть куча WCF сервисов в домене:Windows Phone 7 - Куки не посланные WCF службы

  • AuthenticationService (стандарт MS один, через HTTPS)
  • AppService (HTTP)

Обычно я вызываю службу проверки подлинности и возвращается файл cookie. Для настольных приложений я отсоединяю файл cookie и подключаю его каждый новый вызов службы AppService, который отображает мясо моего API.

Silverlight в браузере автоматически прикрепляет cookie во всех вызовах домена. Я ожидал, что телефон сделает то же самое.

Это не так.

Доступ к заголовкам не поддерживается на телефоне, поэтому ручные манипуляции отсутствуют. Интересно, не потому ли, что из-за какой-то яркой искры в MS подумал, что телефон должен принудить к тому, что куки-файлы только привязаны к конечным точкам HTTPS в том же домене или что-то в этом роде.

Помощь!

Это кошмар для устранения неполадок, поскольку телефон не поддерживает другие основные важные полезные настройки; игнорируя самоподписанные сертификаты.

Спасибо,

Лука

** UPDATE **

В то время как я отслеживаю вверх метод, используя CookieContainer я должен отметить, что даже если метод Add на сбор заголовков отсутствует в Silverlight все еще можно добавлять заголовки с помощью индексатора.

См http://cisforcoder.wordpress.com/2010/12/01/how-to-implement-basic-http-authentication-in-wcf-on-windows-phone-7/

** UPDATE 2 **

CookieContainer может быть установлен в соответствии с Lex ответ. Я сейчас застрял и продолжаю расследовать исключение ArgumentNullException, выкинутое из клиента WCF, после ссылки на Exferences.cs EndInvoke. На моем сервере нет признаков приема вызова.

Два ключевых вызовов на стеке:

System.Net.Browser.HttpWebRequestHelper.ParseHeaders

И

MS.Internal.InternalWebRequest.OnDownloadFailed

FINAL UPDATE

Ошибка ArgumentNullException при вызове получить сервер с самозаверяющим сертификатом.

Однако в эмуляторе/SDK есть что-то странное. У меня есть это исключение для всех моих серверов, даже для тех, у кого нет SSL, и у вас есть сертификат.

У меня также были проблемы, которые были устранены только при локальной перезагрузке. Поэтому я думаю, что мои проблемы были результатом правильного кода, но считали, что это было неправильно из-за других проблем в SDK.

Не знаете, какой совет дать, за исключением того, что вы не доверяете исключениям, вытекающим из стека WP7 WCF, в частности EndpointNotFoundException и ArgumentNullException, и иметь полное клиентское приложение для проверки рамки в качестве проверки работоспособности.

Люк

+0

Стоит отметить, что HTTPOnly-файлы cookie в CookieContainer невидимы и поэтому не могут быть сохранены между активациями/сеансами телефонных приложений. – 2010-12-06 14:16:27

+0

Как замечательная сторона, у меня также была проблема в течение 6 месяцев, когда эмулятор, похоже, не отправляет файлы cookie, но устройство делает это. Это проблема с 7.1 SDK. – 2011-10-11 10:36:47

ответ

1

В настольном SL, я делаю это путем обмена печенья контейнера между службы прокси в стек клиента HTTP. Не пробовал это на WP7, но вы можете это проверить.

Во-первых, вам нужно вставить < httpCookieContainer /> в вашу конфигурацию привязки на стороне клиента (обычно в ServiceReferences.ClientConfig).

В коде перейдите в клиентский стек http.

WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp); 
WebRequest.RegisterPrefix("https://", WebRequestCreator.ClientHttp); 

Затем вам необходимо создать экземпляр CookieContainer и назначить его всем служебным прокси.

var cc = new CookieContainer(); 
var service1 = new ServiceReference1.MyService1Client { CookieContainer = cc }; 
var service2 = new ServiceReference2.MyService2Client { CookieContainer = cc }; 

Теперь, когда ваш контейнер cookie получает cookie, он будет повторно использовать его для всех веб-сервисов. Убедитесь, что cookie поставляется с правильной настройкой Path.