Несколько конечных точек службы WCF в IIS нарушают работу wcftestclient

Я пытаюсь открыть службу WCF через привязку http и net.tcp в IIS. Кажется, что все работает, как ожидалось, когда я указываю только привязки net.tcp или только привязки http, но когда я добавляю как программу wcftestclient, так и все другие генераторы прокси-серверов служб, не удается:

Ошибка: невозможно получить метаданные из net.tcp: //host/application/service.svc ... URI ошибки обмена метаданными: net.tcp: //host/application/service.svc Метаданные содержат ссылку, которую невозможно разрешить: ' net.tcp: //host/application/service.svc '. На net.tcp: //host/application/service.svc не было> прослушивающей конечной точки, которая могла бы принять сообщение. Часто это вызвано неправильным адресом или действием SOAP. См. InnerException, если он есть, для получения дополнительных сведений.

Мой web.config выглядит так:

<?xml version="1.0"?>
<configuration>
  <system.serviceModel>
    <services>      
      <service behaviorConfiguration="ServiceBehavior" name="MyServiceBehavior">
        <endpoint address="mex-http"      binding="mexHttpBinding"   name="mex-http" contract="IMetadataExchange" />
        <endpoint address="service-http"  binding="basicHttpBinding" name="db-http"  contract="IMyService" />
        <endpoint address="mex-tcp"       binding="mexTcpBinding"    name="mex-http" contract="IMetadataExchange" />
        <endpoint address="service-tcp"   binding="netTcpBinding"    name="db-http"  contract="IMyService" />
      </service>      
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyServiceBehavior">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Итак, если я удалю конечные точки mex-http и db-http, все в порядке. Если я этого не сделаю, сервис будет доступен через http, но не через tcp. Если я удалю конечные точки tcp, конечно, http все еще будет доступен. Есть предположения?

Изменить: по совету Марка я изменил соответствующие net.tcp конечные точки на чтение

<endpoint name="mex-http" address="net.tcp://localhost/myservice/MyService.svc/mex" binding="mexTcpBinding" contract="IMetadataExchange" />
<endpoint name="db-http"  address="net.tcp://localhost/myservice/MyService.svc"     binding="netTcpBinding" contract="IMyService" />

который работает как положено!


person Frank Razenberg    schedule 21.12.2011    source источник


Ответы (1)


Вы проверили

Вы выполнили эти шаги, чтобы сделать net.tcp доступным в IIS / WAS?

Предполагая, что у вас есть - я считаю, что для размещения службы net.tcp WCF в WAS требуется, чтобы вы определяли net.tcp базовый адрес и / или полные адреса на net.tcp конечных точках - поскольку эти вещи не определяются виртуальным каталогом IIS.

Так что постарайтесь:

<services>      
   <service behaviorConfiguration="ServiceBehavior" name="MyServiceBehavior">
       ...(your http stuff here)....
       <endpoint name="mex-http" 
           address="net.tcp://YourServer:7171/NetTcpService/mex"       
           binding="mexTcpBinding"    
           contract="IMetadataExchange" />
       <endpoint name="db-http"  
           address="net.tcp://YourServer:7171/NetTcpService/MyService"       
           binding="netTcpBinding"    
           contract="IMyService" />
  </service>      
</services>

or:

<services>      
   <service behaviorConfiguration="ServiceBehavior" name="MyServiceBehavior">
      <host>
         <baseAddresses>
            <add baseAddress="net.tcp://YourServer:7171/NetTcpService"/>
         </baseAddresses>
       </host>
       ...(your http stuff here)....
       <endpoint name="mex-http" 
           address="mex"
           binding="mexTcpBinding"    
           contract="IMetadataExchange" />
       <endpoint name="db-http"  
           address="MyService"
           binding="netTcpBinding"    
           contract="IMyService" />
  </service>      
</services>
person marc_s    schedule 21.12.2011
comment
Спасибо за Ваш ответ. Да, net.tcp доступен (без basicHttpBinding он действительно работает). Я считаю, что добавление <host> в web.config игнорируется при размещении в IIS, и, к сожалению, предложение указать полный адрес конечной точки, похоже, не имеет никакого значения. - person Frank Razenberg; 21.12.2011
comment
На самом деле вы правы, IIS необходимо полностью указать адрес конечной точки net.tcp. Однако он должен указывать на соответствующий .svc! - person Frank Razenberg; 21.12.2011
comment
@FrankRazenberg: Хорошо; спасибо за предупреждение. Я сам никогда не размещал net.tcp внутри IIS / WAS, так что об этом нужно помнить на будущее - спасибо! - person marc_s; 22.12.2011