Я пытаюсь открыть службу 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" />
, который работает, как ожидалось!
Спасибо за ваш ответ. Да, 'net.tcp' доступен (без базовогоHttpBinding он фактически работает). Я считаю, что добавление '' в web.config игнорируется при размещении в IIS, и, к сожалению, предложение указать полный адрес конечной точки, по-видимому, не имеет никакого значения. –
Вы действительно правы, IIS необходимо, чтобы адрес конечной точки net.tcp был полностью определен. Он должен указывать на соответствующий '.svc' хотя! –
@FrankRazenberg: OK; спасибо за хедз-ап. Я никогда не принимал net.tcp внутри IIS/WAS самостоятельно, так что это то, что нужно запомнить на будущее - спасибо! –