У меня есть служба WCF, которая размещена в службе Windows. Эта служба должна работать на одном из компьютеров пользователя, и к ней будет обращаться клиентское приложение, расположенное на другом компьютере. Служба будет доступна через BasicHttpBinding. Сервер будет реализован на C # с использованием .NET 4.0. Клиент будет реализован с использованием .NET 3.5 (внешние требования).
Я сделал несколько настроек службы, чтобы сжать весь WSDL в один файл (а не в несколько XSD). Процедура для этого изложена, например, здесь .
Я предоставляю службу через конечную точку "localhost", т.е.
ServiceHost serviceHost = new ServiceHost(serviceInstance, "http://localhost:8080/...");
Его конечные точки отображаются как URI относительно вышеуказанного базового адреса.
Моя проблема заключается в том, что при создании прокси с использованием Add Service Reference VS2010 я получаю прокси, ctor по умолчанию которого подключается к конечной точке "http://localhost:8080/...". Это нормально работает, если служба размещена на той же машине, что и клиент ( тестирование, например), но очевидно, что происходит сбой, когда сервер и клиентские машины отделены друг от друга: у клиентского компьютера нет конечной точки, прослушивающей "http://localhost:8080/...".
Файл WSDL содержит:
<wsdl:service name="MyService">
<wsdl:port name="BasicHttpBinding_IMyService" binding="tns:BasicHttpBinding_IMyService">
<soap:address location="http://localhost:8080/MyService/IMyService" />
Конечно, я мог бы использовать другой ctor, который получает реальное имя хоста для подключения, но, учитывая, что я сгенерировал клиента, используя реальный адрес хоста, я ожидал, что клиент автоматически подключится к этой конечной точке.
Я видел на нескольких форумах, что вместо использования localhost на сервере я мог бы использовать его имя хоста или IP. Однако хост может иметь несколько имен хостов и / или IP-адресов, и служба не будет знать, какой из них выбрать.
Есть ли способ заставить автоматически сгенерированный прокси использовать адрес «реального» сервера (как указано в URL-адресе WSDL, который использовался для создания прокси)?