Просто еще одна проблема "Существующее соединение было принудительно закрыто удаленным хостом" - PullRequest
0 голосов
/ 19 октября 2011

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

using (Client client = new Client())
{
    client.Open();
    client.DoStuff();
}

Клиент - это класс клиента в сгенерированном прокси-коде, то есть он является производным от System.ServiceModel.ClientBase и реализует интерфейс Contract.

И файл конфигурации выглядит так:

<configuration>
    <system.serviceModel>
        <client>
            <endpoint address="net.tcp://Address"
                      binding="netTcpBinding"
                      bindingConfiguration="Config"
                      contract="Namespace.Contract"
                      name="name">
                <identity>
                    <servicePrincipalName value="Host" />
                </identity>
            </endpoint>
        </client>
        <bindings>
            <netTcpBinding>
                <binding name="Config"
                         closeTimeout="00:01:00"
                         openTimeout="00:01:00"
                         receiveTimeout="00:10:00"
                         sendTimeout="00:01:00"
                         transactionFlow="false"
                         transferMode="Buffered"
                         transactionProtocol="OleTransactions"
                         hostNameComparisonMode="StrongWildcard"
                         listenBacklog="10"
                         maxBufferPoolSize="524288"
                         maxBufferSize="65536"
                         maxConnections="10"
                         maxReceivedMessageSize="65536">
                    <readerQuotas maxDepth="32"
                                  maxStringContentLength="8192"
                                  maxArrayLength="16384"
                                  maxBytesPerRead="4096"
                                  maxNameTableCharCount="16384" />
                    <reliableSession ordered="true"
                                     inactivityTimeout="00:10:00"
                                     enabled="false" />
                    <security mode="None">
                        <transport clientCredentialType="None" />
                    </security>
                </binding>
            </netTcpBinding>
        </bindings>
    </system.serviceModel>
</configuration>

Я получаю исключение «Существующее соединение было принудительно закрыто удаленным хостом» каждый раз, когда код достигает client.Open (). Что действительно беспокоит, так это то, что когда я пытаюсь сделать это с другого компьютера, нет никаких исключений. Кроме того, файл конфигурации, используемый для обеспечения безопасности транспорта, был изменен на «Нет», а на компьютере, на котором он работает, старый файл конфигурации со значением

<security mode="Transport">
    <transport clientCredentialType="Windows"
               protectionLevel="EncryptAndSign" />
    <message clientCredentialType="Windows" />
</security>

тогда как на первой машине и на сервере это

<security mode="None">
    <transport clientCredentialType="None" />
</security>

Что может вызвать это? Я прочитал здесь множество других вопросов, касающихся этого исключения, но ни один из них не напоминал мою проблему.

РЕШИТЬ! Я установил параметры безопасности не в том месте. Служба самостоятельно размещалась в ServiceHost, а свойство Security не было установлено, поэтому по умолчанию оно отличалось от None.

1 Ответ

1 голос
/ 19 октября 2011

Проверьте настройки безопасности для этого проекта на вашем IIS (вы используете IIS правильно?).Я думаю, что это все еще говорит тип аутентификации Windows.

...