Я пытаюсь получить доступ к службе 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.