Несколько конечных точек службы WCF в перерывах IIS wcftestclient - PullRequest
0 голосов
/ 21 декабря 2011

Я пытаюсь предоставить службу 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" />

, что работает как ожидалось!

1 Ответ

1 голос
/ 21 декабря 2011

Вы уже извлекли

Вы выполнили эти шаги, чтобы сделать 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>

или:

<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>
...