WCF NetTcpBinding с mex
Я пытаюсь опубликовать службу wcf, используя nettcpbinding. Я хочу публиковать метаданные, используя? Wsdl.
Я добавил в файл конфигурации следующую строку:
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
но я не вижу wsdl в своем браузере. что я сделал не так?
Спасибо.
Изменить: вот соответствующая часть моего файла конфигурации:
<system.serviceModel>
<services>
<service name="wcfcheck.service1" behaviorConfiguration="wcfcheck.Service1Behavior">
<endpoint address="" binding="netTcpBinding" contract="wcfcheck.Iservice1"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="wcfcheck.Service1Behavior">
<serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
Я не могу получить доступ к правильному URL. Я пробовал как http://localhost:51159/Service1.svc?wsdl, так и http://localhost:51159/Service1.svc/mex?wsdl и без '? wsdl'.
Ответы
Ответ 1
Вам нужно использовать элемент <serviceMetadata>
.
<behaviors>
<serviceBehaviors>
<behavior name="metadataSupport">
<!-- Enables the IMetadataExchange endpoint in services that -->
<!-- use "metadataSupport" in their behaviorConfiguration attribute. -->
<!-- In addition, the httpGetEnabled and httpGetUrl attributes publish -->
<!-- Service metadata for retrieval by HTTP/GET at the address -->
<!-- "http://localhost:8080/SampleService?wsdl" -->
<serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
</behavior>
</serviceBehaviors>
</behaviors>
Ответ 2
Вам нужно опубликовать метаданные службы через http для wsdl. Добавьте следующий тег в < system.serviceModel > тега вашего конфигурационного файла
<behaviors>
<serviceBehaviors>
<behavior name = "MetadataBehavior">
<serviceMetadata httpGetEnabled = "true"/>
</behavior>
</serviceBehaviors>
</behaviors>
Вам также необходимо указать http-адрес, из которого будут доступны метаданные службы в wsdl. Добавьте это в < сервис > node вашего конфигурационного файла:
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:8001" />
<add baseAddress="http://localhost:8000/Service1" />
</baseAddresses>
</host>
Затем, если вы перейдете к http://localhost:8000/Service1?wsdl, вы увидите wsdl для своей службы.
Ответ 3
Вы можете попробовать привязку mexTcp и убедиться, что ваш базовый адрес начинается с net.tcp://.....