WCF MetaData не работает - PullRequest
5 голосов
/ 18 мая 2009

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

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

... при ручном просмотре службы с помощью IE.

(Я предполагаю, что это та же самая причина, по которой мое клиентское приложение не может сгенерировать ссылку на сервис. Детские шаги и все)

И все же мой web.config выглядит нормально:

<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
<behaviors>
    <endpointBehaviors>
        <behavior name="webHttpEnablingBehaviour">
            <webHttp />
        </behavior>
    </endpointBehaviors>
    <serviceBehaviors>
        <behavior name="webHttpEnablingBehaviour">
            <serviceMetadata httpGetEnabled="true" />
        </behavior>
    </serviceBehaviors>
</behaviors>
<services>
    <service name="IWW.MIGTurbo2.WCF.Security.SecurityBroker">
        <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
        <endpoint address=""
            binding="webHttpBinding"
            bindingConfiguration="default"
            contract="IWW.MIGTurbo2.WCF.Security.ISecurityBroker"
                behaviorConfiguration="webHttpEnablingBehaviour">
        </endpoint>
    </service>
</services>
<client />
<bindings>
    <webHttpBinding>
        <binding name="default" />
    </webHttpBinding>
</bindings>
</system.serviceModel>

Итак, мой IMetadataExchange контракт определен с mex в порядке и подключен, насколько я вижу. Я что-то упустил ненормальный?

Редактировать

Определение моего сервиса показано ниже, если это полезно:

<%@ ServiceHost Language="C#" Debug="true" Service="IWW.MIGTurbo2.WCF.Security.SecurityBroker" Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory"   %>

Ответы [ 2 ]

9 голосов
/ 18 мая 2009

В вашем конфигурационном файле есть атрибут поведениеConfiguration для элемента "конечная точка", но он также необходим для элемента "service".

2 голосов
/ 23 января 2013

Я использую NetTcpBinding для всех. В моем случае у меня возникла та же проблема, и я решил ее, добавив:

(a) поведениеConfiguration = "" для конечной точки mex

  <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" behaviourConfiguration="" />

(b) поведениеConfiguration = "mex" в определении сервиса:

  <services>
     <service name="AcmeService" behaviorConfiguration="mex">

(c) Запись о поведении

  <behaviors>
    <serviceBehaviors>
        <behaviour name="mex">
            <serviceDebug includeExceptionDetailInFaults="false"/>
            <serviceMetadata />
        </behavior>
     </serviceBehaviors>
  </behaviors>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...