Подтвердить что ты не робот

MexHttpBinding - добавьте ServiceMetadataBehavior в файл конфигурации или в ServiceHost напрямую, чтобы включить поддержку этого контракта

Я знаю, что это задавали много раз и много раз отвечали, но все предоставленные образцы, которые должны работать, похоже, не хотят работать для меня сегодня.

Когда я пытаюсь запустить хост, я продолжаю получать следующую ошибку:

"Название контракта" IMetadataExchange "не может быть найдено в списке контрактов, реализованных службой TraceService. Добавьте ServiceMetadataBehavior в файл конфигурации или в ServiceHost напрямую, чтобы включить поддержку этого контракта."

Мой сервис размещается на хостинге управляемых окон в соответствии с примером Microsoft: http://msdn.microsoft.com/en-us/library/ms733069%28v=vs.90%29.aspx

И вот моя приятная и простая конфигурация:

  <system.serviceModel>
    <services>
      <service name="Daff.Lae.Service.TraceService">
        <endpoint address="" binding="wsHttpBinding" name="TraceService" contract="Contracts.Service.ITraceService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080/TraceService" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="DefaultBehavior">
          <serviceDebug includeExceptionDetailInFaults="true"/>
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

Конечно, проблема становится более интересной, если нет ошибок, если я удалю эту строку:

<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>

Любая помощь будет очень очень оценена:)

4b9b3361

Ответ 1

Обязательно укажите behaviorConfiguration в элементе service вашей конфигурации, чтобы разрешить либо httpGet, либо httpsGet.

Я вижу, что вы уже определили serviceBehavior с именем DefaultBehavior - теперь все, что вам нужно сделать, это добавить behaviorConfiguration="DefaultBehavior" в элемент service, чтобы строка стала:

<service name="Daff.Lae.Service.TraceService" behaviorConfiguration="DefaultBehavior">

Если вы явно не укажете поведение для своей службы, как HTTP GET, так и HTTPS GET, по умолчанию запрещены, и ваши метаданные не будут отображаться.

Ответ 2

Поскольку вы используете WS-Http, вы привязываетесь к протоколу HTTPS, поэтому вам нужно использовать правильную привязку MEX;

<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" /> 

и измените baseaddress на https.

Или (наоборот) конвертируйте привязку wsHttp к привязке basicHttp, и все начнет работать для вас.

Ответ 3

`<services>
  <service  name="MyService.Service1" behaviorConfiguration="Service1" >

</services>
 `

 where MyService is the application name , Service1 is the default implementation class for IService1
 `
 <protocolMapping>
  //Remove any http or https bindings provided  
</protocolMapping>   
 `
It should help when you use WCF Application Project