2011-12-21 2 views
0

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

Error: Cannot obtain Metadata from net.tcp://host/application/service.svc ... Metadata Exchange Error URI: net.tcp://host/application/service.svc Metadata contains a reference that cannot be resolved: 'net.tcp://host/application/service.svc '. There was > no endpoint listening at net.tcp://host/application/service.svc that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details.

Мой 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 все еще доступен. Есть предположения?

Edit: Основываясь на предложении Марка, я изменил соответствующие 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

Вы проверили

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

Спасибо за ваш ответ. Да, 'net.tcp' доступен (без базовогоHttpBinding он фактически работает). Я считаю, что добавление '' в web.config игнорируется при размещении в IIS, и, к сожалению, предложение указать полный адрес конечной точки, по-видимому, не имеет никакого значения. –

+0

Вы действительно правы, IIS необходимо, чтобы адрес конечной точки net.tcp был полностью определен. Он должен указывать на соответствующий '.svc' хотя! –

+0

@FrankRazenberg: OK; спасибо за хедз-ап. Я никогда не принимал net.tcp внутри IIS/WAS самостоятельно, так что это то, что нужно запомнить на будущее - спасибо! –

Смежные вопросы