Вопрос по wcf – WCF NetTcpBinding с mex

16

Я пытаюсь опубликовать службу 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: // локальный: 51159 / Service1.svc WSDL а такжеHTTP: // локальный: 51159 / Service1.svc / MEX WSDLи без "? wsdl".

что вы определяете с точки зрения базовых адресов? Я ничего не вижу в вашей конфигурации ... у вас есть только адрес = & quot; mex & quot; для конечной точки MEX, но это не полный адрес marc_s
Вам нужно либо иметь базовый адрес http: //, где можно найти MEX, либо вам нужно указать & quot; httpGetUrl & quot; в вашем & lt; serviceMetadata & gt; тег. marc_s
То, что я пишу как базовый адрес или в httpGetUrl, похоже, не работает. например:localhost:51159/mex или жеlocalhost:51159/service1.svc или жеlocalhost:51159/service1.svc/mex или добавление? wsdl ничего не работает. пожалуйста помоги! Clangon

Ваш Ответ

3   ответа
12

Вам необходимо опубликовать метаданные службы через http для wsdl. Добавьте следующий тег в тег & lt; system.serviceModel & gt; тег вашего конфигурационного файла

<behaviors>
  <serviceBehaviors>
    <behavior name = "MetadataBehavior">
      <serviceMetadata httpGetEnabled = "true"/>
    </behavior>
  </serviceBehaviors>
</behaviors>

Вам также необходимо указать http-адрес, с которого будут доступны метаданные службы в wsdl. Добавьте это в & lt; сервис & gt; узел вашего конфигурационного файла:

<host>
  <baseAddresses>
    <add baseAddress="net.tcp://localhost:8001" />
    <add baseAddress="http://localhost:8000/Service1" />
  </baseAddresses>
</host>

Тогда, если вы идете вHTTP: // локальный: 8000 / Service1 WSDL, вы должны увидеть wsdl для вашего обслуживания.

В каком разделе находится тег хоста?
13

Вам нужно использовать<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>
1

Вы можете попробовать связывание mexTcp и убедиться, что ваш базовый адрес начинается с net.tcp: // .....

Похожие вопросы