Проблема подключения службы WCF - может быть, безопасность? - PullRequest
2 голосов
/ 02 марта 2009

Я пытаюсь отладить службу WCF. Этот клиент мог подключаться в прошлом, но теперь я не могу подключиться. Служба развернута на сервере. Я могу зайти на страницу обслуживания сервера с помощью браузера и увидеть инструкции по созданию клиента. Я заново сгенерировал клиентский прокси и файл конфигурации, используя svcutil.

Клиент запускается, но первый звонок в службу возвращается с ошибкой по истечении 1 минуты. Тем временем я могу подключиться к сервису, работающему на сервере, и пройтись по коду там. Я вижу, что мой клиент никогда не был зарегистрирован. Точка останова в коде сервера для этого вызова не получает. По какой-то причине я не могу войти в код сервера (но я могу подключить отладчик к службе на сервере):

Unable to automatically step into the server. 
Connecting to the server machine 'shuttle' failed. 
Please install the Visual Studio 2008 Remote Debugger on the 
server to enable this functionality.

Удаленный отладчик установлен и работает, или, конечно. Я получаю эту ошибку после долгого времени ожидания:

Client is unable to finish the security negotiation within the 
configured timeout (00:00:00).  The current negotiation leg is 1 (00:00:00).

Когда я устанавливаю режим безопасности = нет и увеличиваю время ожидания, ошибка меняется на

The open operation did not complete within the allotted timeout of 00:02:00.
The time allotted to this operation may have been a portion of a 
longer timeout.

У меня не запущены брандмауэры, и я вижу, что запрос поступает на сервер в Ethereal. Я смотрю на поток TCP, и я не могу сказать, почему переговоры терпят неудачу. В журнале событий ничего не связано. У меня заканчивается пар и я буду признателен за подсказку.

Клиентский app.config содержит раздел, сгенерированный svcutil:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.serviceModel>
        <bindings>
            <wsDualHttpBinding>
                <binding name="WSDualHttpBinding_SportRadarDCS" 
                    closeTimeout="00:01:00" openTimeout="00:01:00" 
                    receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    bypassProxyOnLocal="false" transactionFlow="false" 
                    hostNameComparisonMode="StrongWildcard"
                    maxBufferPoolSize="524288" 
                    maxReceivedMessageSize="65536"
                    messageEncoding="Text" textEncoding="utf-8" 
                    useDefaultWebProxy="true">
                      <readerQuotas 
                       maxDepth="32" maxStringContentLength="8192"  
                       maxArrayLength="16384"
                       maxBytesPerRead="4096" 
                       maxNameTableCharCount="16384" />
                    <reliableSession ordered="true" 
                       inactivityTimeout="00:10:00" />
                    <security mode="Message">
                        <message clientCredentialType="Windows" 
                           negotiateServiceCredential="true"
                           algorithmSuite="Default" />
                    </security>
                </binding>
            </wsDualHttpBinding>
        </bindings>
        <client>
            <endpoint
                 address="...."
                binding="wsDualHttpBinding" 
                    bindingConfiguration="WSDualHttpBinding_SportRadarDCS"
                    contract="SportRadarDCS" 
                    name="WSDualHttpBinding_SportRadarDCS">
                <identity>
                    <userPrincipalName value=".. my domain user ..." />
                </identity>
            </endpoint>
        </client>
    </system.serviceModel>
</configuration>

1 Ответ

8 голосов
/ 02 марта 2009

Посмотрите на трассировку WCF. Если вы запустите это на своем сервисном хосте, он даст вам индивидуальные вызовы WCF, которые происходят, и этого должно быть достаточно для того, чтобы вы выяснили, какая часть вашей конфигурации отклонена.

Я обнаружил, в частности, проблемы с подключением, что это был единственный способ устранить причины.

MSDN на WCF Отслеживание вашего приложения

Хороший учебник, который поможет вам понять MSDN

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