Я потратил два дня, пытаясь понять это, и я в тупике. У меня есть серверы WCF, работающие как служба в Windows. Клиент может подключиться к нему на той же машине, но как только я перейду, попытаюсь подключиться к службе с другой машины, я не могу.
Так что, если клиент и хост находятся на одной машине, проблем нет. Если хост и клиент находятся на разных машинах, я получаю ошибки исключения.
Вот что странно: я могу использовать svcutil для генерации файлов конфигурации приложения и proxy.cs с удаленной машины, но как только я вызываю функцию, она выдаёт ошибки.
Не удалось подключиться к net.tcp: // ipaddress: port / Service1. Код ошибки TCP 10061. Невозможно установить соединение, потому что целевая машина активно отказалась от него.
Если я вызываю его с той же машины Host / Client, ошибок нет.
Есть идеи?
Обновлено:
Вот настройки конечной точки службы.
<system.serviceModel>
<services>
<service behaviorConfiguration="Service1Behavior" name="WcfServiceLibrary1.Service1">
<endpoint address="net.tcp://192.168.1.75:8523/Service1" binding="netTcpBinding"
contract="WcfServiceLibrary1.IService1" />
<endpoint address="net.tcp://192.168.1.75:8523/mex" binding="mexTcpBinding"
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://192.168.1.75:8523/" />
</baseAddresses>
</host>
</service>
</services>
<bindings>
<netTcpBinding>
<binding name = "TcpBindingConfiguration">
<security mode="None"/>
</binding>
</netTcpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="Service1Behavior">
<serviceMetadata />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Я все перепробовал.
Есть идеи?
Опять же, клиент и хост находятся на одной машине, все в порядке, как только я помещаю клиента на другой компьютер, никаких игральных костей ...
У меня никогда не было такого количества головная боль с сетевым программированием в те времена ...
Спасибо
Если на хост-машине включен Windows Firewall, попробуйте отключить его (это можно сделать через Control Panel). Если все работает, значит, вы нашли виновника. Вам нужно будет добавить исключение для вашей службы в конфигурацию брандмауэра и снова включить его.
То же самое можно сделать, если вы используете любое другое стороннее программное обеспечение брандмауэра, которое часто поставляется в комплекте с антивирусным ПО.
Чтобы установить отсутствие безопасности по TCP, вы можете использовать конструктор в коде:
var binding = new NetTcpBinding(SecurityMode.None);
или сделать это в XML конфигурации:
<netTcpBinding>
<binding name="myTcpBinding">
<security mode="None" />
…
Служба WCF активно прослушивает этот порт? Вы должны быть в состоянии определить это, запустив команду из строки cmd:
netstat -a -n -p TCP
Он должен показать, что процесс прослушивает 192.168.1.75:8523
. Если да, то пробовали ли вы включить ведение журнала трассировки WCF? Чтобы включить это, вы должны добавить что-то вроде этого в свой app.config:
<system.diagnostics>
<sources>
<source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true">
<listeners>
<add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData= "C:\MyApp.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
Затем попытайтесь установить соединение и посмотрите, был ли создан «C: \ MyApp.svclog» и отображаются ли какие-либо ошибки. Если на данном компьютере установлен VisualStudio, файл ".svclog" можно открыть, просто дважды щелкнув его.
РЕДАКТИРОВАТЬ: Извините, я пропустил в комментариях выше, что вы уже включили ведение журнала трассировки. По крайней мере, вы знаете, что WCF получает предстоящее сообщение. Я никогда раньше не видел вашей конкретной ошибки, извините.