Windows Phone 7 - файлы cookie не отправляются в службу WCF - PullRequest
3 голосов
/ 30 ноября 2010

У меня есть несколько служб WCF в домене:

  • Служба аутентификации (стандартная MS, через HTTPS)
  • AppService (HTTP)

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

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

Это не так.

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

Помощь !!

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

Спасибо

Люк

** ОБНОВЛЕНИЕ **

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

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

** ОБНОВЛЕНИЕ 2 **

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

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

System.Net.Browser.HttpWebRequestHelper.ParseHeaders

И

MS.Internal.InternalWebRequest.OnDownloadFailed

ФИНАЛЬНОЕ ОБНОВЛЕНИЕ

Кажется, что ArgumentNullException генерируется при вызове сервера с самозаверяющим сертификатом.

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

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

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

Люк

1 Ответ

1 голос
/ 01 декабря 2010

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

Сначала вам нужно вставитьв конфигурации привязки на стороне клиента (обычно в 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 имеет правильную настройку пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...