Как настроить службу WCF для клиентов, работающих на сетевых машинах?
-
03-07-2019 - |
Вопрос
Я только что создал службу / клиент WCF, и все работает нормально при работе на той же машине. Но не могу понять, как настроить его для работы на разных машинах. Ты знаешь как?
В настоящий момент URI настроен на http: // localHost: 8000 ...... р>
Но я думаю, что хочу что-то вроде net.tcp: // MyServer: 8000 & # 8230; ..
Любые идеи были бы великолепны. Спасибо.
Решение
Судя по всему, у вас есть и служба, и клиент в одном исполняемом файле. Хотя это может быть сделано, когда вы хотите, чтобы они были на отдельных машинах, вам необходимо иметь исполняемый файл / хост для службы (либо самостоятельно размещенный, либо в IIS) и исполняемый файл для клиента. Каждый из них должен быть правильно настроен с адресом, привязкой и контрактом в соответствующем разделе конфигурации для него. Таким образом, на сервере у вас будет что-то вроде этого:
<configuration>
<system.serviceModel>
<services>
<service name="YourService">
<endpoint address="http://MyServer:8000/..."
binding="BasicHttpBinding"
contract="Your.IContract" />
</service>
</services>
</system.serviceModel>
</configuration>
И на клиенте у вас будет это:
<configuration>
<system.serviceModel>
<client>
<endpoint address="http://MyServer:8000/..."
binding="BasicHttpBinding"
contract="Your.IContract"
name="ClientEndpoint" />
</client>
</system.serviceModel>
</configuration>
Главное - убедиться, что клиент и сервер могут взаимодействовать друг с другом через указанный порт и протокол (прежде всего, убедитесь, что брандмауэр не блокирует связь). Еще одна вещь, о которой следует помнить, это изменение протокола привязки, который может повлиять на другие аспекты вашей службы (безопасность важна, а также то, что вы можете и не можете делать со службой).
Другие советы
Здесь недостаточно информации, чтобы ответить на ваш вопрос.
Предполагая, что вы не задаете информацию об адресе / привязке / контракте в ServiceHost и прокси через код, вам необходимо опубликовать раздел вашего конфигурационного файла.
Если вы делаете это в коде, вам нужно показать, какой код вы используете.
Судя по тому, что я могу сказать, у вас может быть несоответствие с транспортной привязкой. Служба и клиент должны находиться на одном и том же транспорте (http, tcp, именованные каналы и т. Д. И т. Д.).