Относительный адрес конечной точки wcf

Я просто изучаю 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-адреса для нее?

9
задан marc_s 31 October 2011 в 11:41
поделиться