Использование службы WCF в MonoTouch с аутентификацией - PullRequest
2 голосов
/ 12 июля 2011

Я использую сервисный клиент WCF, созданный с помощью slsvcutil из набора инструментов Silverlight версии 4. Я также пробовал версию 3 с теми же проблемами.Когда я использую экземпляр клиента, работающий по протоколу http без учетных данных пользователя, он запускается без проблем.Но мне нужно переключиться на https для производительных серверов и отправить учетные данные пользователя, которые жестко заданы для моего приложения.Для этого я использую следующий код:

        var binding = new BasicHttpBinding (BasicHttpSecurityMode.TransportCredentialOnly);         
        var endpoint = new EndpointAddress (AppSettings.FlareEndPoint);
        _service = new TopicAnalystAPIClient(binding, endpoint);
        _service.ClientCredentials.UserName.UserName = "xxx";
        _service.ClientCredentials.UserName.Password =  "xxx";

Когда я вызываю метод в этой службе, указывающий на http без аутентификации, он работает.Когда я использую этот код для http / https с учетными данными, я получаю сообщение об ошибке «Произошла ошибка при обработке веб-запроса: код состояния 401 (не авторизован): не авторизован», исключение.Я проверил правильность учетных данных, я могу открыть ссылку на сервис в своем браузере.Я также попробовал несколько комбинаций http / https и значения SecurityMode.Я также пробовал на четырех разных серверах всегда с одинаковым результатом.

В чем может быть проблема?

1 Ответ

1 голос
/ 25 июля 2011

Возможно много перестановок. BasicHttpSecurityMode.TransportCredentialOnly должен использоваться без SSL [1] с использованием самого HTTP. Это означает, что сервер отправит один (или более) метод (ы) аутентификации клиенту (например, basic, digest, ntlm), и Mono (включая MonoTouch) должен обеспечивать поддержку большинства из них.

Возможно, что компоновщик (если используется) удаляет один из них. В этом случае вы можете попробовать создать и протестировать без ссылок (или пропустить соединение System.Net.dll).

Также возможно, что метод аутентификации, на котором настаивает подача, не поддерживается. Вы можете найти, какой из них используется, запустив трассировку сети (например, wireshark) или, возможно, он будет отображаться более подробно в журнале сервера (вместе с ошибкой 401).

[1] http://msdn.microsoft.com/en-us/library/system.servicemodel.basichttpsecuritymode%28v=vs.95%29.aspx

...