Я пытаюсь открыть службу 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" />
который работает как положено!