как вызвать веб-сервис по схеме авторизации NTLM? - PullRequest
7 голосов
/ 01 сентября 2011

Я новичок в вызове веб-служб WCF, поэтому надеюсь, что это простой вопрос.Как при смене схемы авторизации с анонимной на NTLM при вызове веб-службы с клиентом WinNET .NET 4

В настоящий момент я получаю исключение: HTTP-запрос не авторизован при аутентификации клиентаСхема «Аноним».Заголовок аутентификации, полученный от сервера, был 'NTLM' .

. Моя цель - создать небольшой инструмент, который помог бы мне контролировать хранилище данных и куб TFS 2010.TFS предоставляет веб-сервис WarehouseControlWebService.Я могу вызвать сервис через тестовый режим в браузере при входе на сервер.Однако я пытаюсь вызвать тот же веб-сервис удаленно, с моего рабочего стола.Моя учетная запись находится в локальной группе администраторов на сервере.

Я создал WinForm .NET 4 с каноническими Button1 и TextArea1.Затем я добавил ссылку на службу в веб-службу и творчески назвал ее ServiceReference1:

Add Service Reference...
http://tfssvr:8080/tfs/TeamFoundation/Administration/v3.0/WarehouseControlService.asmx

И вот мой код:

private void button1_Click(object sender, EventArgs e)
{
    // Creating a proxy takes about 3-4 seconds
    var dwSvc = new ServiceReference1.WarehouseControlWebServiceSoapClient();

    // Invoking the method throws an MessageSecurityException
    var dwStatus = dwSvc.GetProcessingStatus(null, null, null);
}

Я получаю System.ServiceModel.Security.MessageSecurityException:

HTTP-запрос не авторизован с помощью схемы аутентификации клиента «Anonymous».Заголовок аутентификации, полученный от сервера, был 'NTLM' .

. Я попытался передать свои учетные данные через:

dwSvc.ClientCredentials.Windows.ClientCredential =
    new System.Net.NetworkCredential("user", "pass", "domain");

, а также ...

dwSvc.ClientCredentials.Windows.ClientCredential =
    CredentialCache.DefaultNetworkCredentials;

Я перебираю документацию WCF, но ... о боже ... там много всего.Я надеюсь, что это что-то легко ??

Заранее спасибо.

Ответы [ 2 ]

5 голосов
/ 24 ноября 2011

Установите привязки вашей конфигурации на режим безопасности = "TransportCredentialOnly" и транспортный clientCredentialType = "Ntlm"

<system.serviceModel>
    <bindings>  
        <basicHttpBinding>
            <binding name="WarehouseControlWebServiceSoap" closeTimeout="00:01:00"
                openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                useDefaultWebProxy="true">
                <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                    maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                <security mode="TransportCredentialOnly">
                    <transport clientCredentialType="Ntlm" proxyCredentialType="None"
                        realm="" />
                    <message clientCredentialType="UserName" algorithmSuite="Default" />
                </security>
            </binding>
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://tfsServer:8080/tfs/TeamFoundation/Administration/v3.0/WarehouseControlService.asmx"
            binding="basicHttpBinding" bindingConfiguration="WarehouseControlWebServiceSoap"
            contract="TfsWarehouse.WarehouseControlWebServiceSoap" name="WarehouseControlWebServiceSoap" />
    </client>
</system.serviceModel>
0 голосов
/ 12 сентября 2011

Вы смотрите в правильном направлении. Это хорошая страница с некоторыми примерами информации о доступных методах аутентификации, которые вам нужны: http://man.ddvip.com/web/bsaspnetapp/LiB0087.html. По крайней мере, эта страница должна дать вам больше подсказок для продолжения ваших усилий.

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