Служба Windows WCF. Может подключаться локально, но не удаленно

Я потратил два дня, пытаясь понять это, и я в тупике. У меня есть серверы 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>

Я все перепробовал.

Есть идеи?

Опять же, клиент и хост находятся на одной машине, все в порядке, как только я помещаю клиента на другой компьютер, никаких игральных костей ...

У меня никогда не было такого количества головная боль с сетевым программированием в те времена ...

Спасибо

7
задан nitefrog 16 August 2010 в 19:12
поделиться

2 ответа

Если на хост-машине включен Windows Firewall, попробуйте отключить его (это можно сделать через Control Panel). Если все работает, значит, вы нашли виновника. Вам нужно будет добавить исключение для вашей службы в конфигурацию брандмауэра и снова включить его.

То же самое можно сделать, если вы используете любое другое стороннее программное обеспечение брандмауэра, которое часто поставляется в комплекте с антивирусным ПО.

edit:

Чтобы установить отсутствие безопасности по TCP, вы можете использовать конструктор в коде:

var binding = new NetTcpBinding(SecurityMode.None);

или сделать это в XML конфигурации:

<netTcpBinding>
    <binding name="myTcpBinding">
        <security mode="None" />
…
3
ответ дан 7 December 2019 в 14:26
поделиться

Служба 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 получает предстоящее сообщение. Я никогда раньше не видел вашей конкретной ошибки, извините.

0
ответ дан 7 December 2019 в 14:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: