Ошибка метаданных - WCF - PullRequest
1 голос
/ 17 мая 2010

На хостинге моей службы WCF под названием «SimpleWCF» в IIS; Я получаю следующую ошибку при просмотре вручную в моем браузере; *
1001 *

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


Я не могу понять причину этой ошибки [все еще новая].
Вот мой файл конфигурации;

<configuration>
  <system.serviceModel>
  <behaviors>
  <endpointBehaviors>
    <behavior name="">
     <webHttp />
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="">
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
<bindings>
  <basicHttpBinding>
    <binding name="LargeData" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
      <security mode="None">
      </security>
    </binding>
  </basicHttpBinding>
</bindings>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<services>
  <service name="SimpleWCF">
    <endpoint address="http://localhost/Sample/SimpleWCF.svc" binding="basicHttpBinding" bindingConfiguration="LargeData" contract="SimpleWCF"/>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
  </service>
</services>
  </system.serviceModel>
  <system.web>
<compilation debug="true"/>
  </system.web>
</configuration>

1 Ответ

2 голосов
/ 17 мая 2010

В вашем конфиге вам нужно дать действительные имена вашему поведению!

<behaviors>
  <endpointBehaviors>
    <behavior name="webBehavior">
     <webHttp />
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="serviceBehavior">
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
  </serviceBehaviors>
</behaviors>

и их из вашего <service> тега, вам нужно ссылаться на такое поведение:

<service name="SimpleWCF" behaviorConfiguration="serviceBehavior">

чтобы он стал активным.

Если вы работаете в .NET 4 / WCF 4, вы также можете определить поведение по умолчанию, но тогда вам нужно полностью пропустить атрибут name=:

<behaviors>
  <endpointBehaviors>
    <behavior>
     <webHttp />
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
  </serviceBehaviors>
</behaviors>

Теперь каждая конечная точка получит такое поведение конечной точки, а каждая служба получит поведение службы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...