Я просто изучаю wcf и не могу понять его очень простая вещь.
Я создаю службу WCF, которую я хочу разместить в IIS, как веб-приложение, с собственным путем, например http: // myhost / myapp /
и всем остальным.
Я создаю проект службы WCF в VS, у меня есть файл *. Svc
, описывающий его, затем я определяю для него простую конечную точку следующим образом:
<endpoint address=""
binding="basicHttpBinding"
contract="wcf_service_auth.IPshService" />
Затем я публикую это такой сервис, как веб-приложение IIS, в виртуальный каталог, допустим, его имя psh_pub
, поэтому я могу получить доступ к сервису по URL-адресу http: //localhost/psh_pub/pshservice.svc/
. Он показывает мне страницу приветствия WCF и дает мне ссылку на WSDL, которая дает мне правильное описание wsdl.
Это нормально.
Следующий шаг - я хочу добавить конечную точку MEX. Я добавляю в конфигурацию:
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange"/>
Это тоже нормально, конечная точка доступна по адресу http: //localhost/psh_pub/pshservice.svc/mex
и WcfTestClient.exe
дает мне правильный ответ config с этого URL.
Вот и проблема.
У меня есть служба WCF, работающая под IIS, и я хочу добавить к ней еще одну конечную точку. Например, пусть это будет конечная точка net.tcp
. IIS настроен по умолчанию для приема подключений net.tcp
через порт 808, и я добавляю net.tcp
к свойствам моего веб-приложения, и я хочу добавить конечную точку к моей службе следующим образом:
<endpoint address=""
binding="netTcpBinding"
contract="wcf_service_auth.IPshService" />
, и теперь я предполагаю, что моя служба должна быть доступна по URL-адресу net.tcp: // локальный: 808 / psh_pub / pshservice.svc
. Но это не так. И все инструкции и руководства в Интернете говорят, что я должен указать полный адрес в файле конфигурации следующим образом:
<endpoint address="net.tcp://localhost:808/psh_pub/pshservice.svc"
binding="netTcpBinding"
contract="wcf_service_auth.IPshService" />
И если я это сделаю, это сработает. Но если разместить службу в другом виртуальном каталоге, мне нужно будет изменить config. Если я размещу его на другом сервере, мне нужно будет изменить config. Если я размещу его на нескольких серверах, мне придется поддерживать столько же конфигураций, сколько серверов у меня есть.
Итак, основные вопросы:
Есть ли способ в WCF указать конечную точку net.tcp
(или https) для службы WCF, размещенной в IIS, без указания абсолютного URL-адреса для нее?