rahul-4u Ответов: 2

Как включить публикацию метаданных для службы WCF


Я создал службу WCF, размещенную на IIS. Я получаю следующую ошибку при просмотре сервиса.

Публикация метаданных для этой службы в настоящее время отключена.

Вот код для web. config

<?xml version="1.0"?>
<configuration>
    <system.web>
        <compilation debug="true" targetFramework="4.0"/>
    </system.web>
    <system.serviceModel>
        <services>
            <service behaviorConfiguration="ServiceBehavior" name="IISHostedServiceEx1.MyService">
                <endpoint address="http://localhost/IISHostedServiceEx1/MyService.svc" binding="wsHttpBinding" contract="IMyService">
                    <identity>
                        <dns value="localhost"/>
                    </identity>
                </endpoint>
                <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
            </service>
        </services>
        <behaviors>
            <serviceBehaviors>
                <behavior name="ServiceBehavior">
                    <!-- To avoid disclosing metadata information,
    set the value below to false and remove the
    metadata endpoint above before deployment -->
                    <serviceMetadata httpGetEnabled="true"/>
                    <!-- To receive exception details in faults for
    debugging purposes, set the value below to true.
    Set to false before deployment to avoid disclosing exception information -->
                    <serviceDebug includeExceptionDetailInFaults="false"/>
                </behavior>
            </serviceBehaviors>
        </behaviors>
    </system.serviceModel>


    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>
    </system.webServer>
</configuration>


Может ли какое-нибудь тело сказать мне, как я могу разрешить это?

заранее спасибо.

2 Ответов

Рейтинг:
2

vatsa_gaurav

Щелкните правой кнопкой мыши ссылку на службу, выберите пункт Настроить и снимите флажок "повторное использование типов в ссылочных сборках".
Во-вторых, вам нужно иметь одну дополнительную конечную точку ImetaDataExchange, если ее там нет, то добавьте в web.config.
в <адрес конечной точки="мекс" привязки="mexHttpBinding" договора="реализацией интерфейса imetadataexchange"&ГТ;


Рейтинг:
0

nye klaus

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

<system.serviceModel>
  <services>
    <service behaviorConfiguration="ClientProcessadorEventos" name="ClienteExternoWS.ClientProcessadorEventos">
      <endpoint address="mex" binding="mexHttpBinding" name="Mex" contract="ServiceInterfaces.IProcessadorEventos"/>
      <endpoint address="basic" binding="basicHttpBinding" name="Basic" contract="ServiceInterfaces.IProcessadorEventos"/>
      <endpoint address="" binding="wsHttpBinding" name="Ws" contract="ServiceInterfaces.IProcessadorEventos"/>
    </service>
  </services>
  <behaviors>
    <serviceBehaviors>
      <behavior name="ClientProcessadorEventos">
        <serviceMetadata httpGetEnabled="true"/>
      </behavior>
    </serviceBehaviors>
  </behaviors>
</system.serviceModel>


В этом случае мой сервис предоставляет тот же контракт на чистый адрес .svc (root, так как адрес не указан), а также предоставляет как basicBinding на [ServiceName].svc/Basic адрес.