Решить ошибку WCF: публикация метаданных для этой службы в настоящее время отключена - PullRequest
4 голосов
/ 09 июня 2011

Я хочу опубликовать веб-сервис с настраиваемой конфигурацией привязки. Я использую пользовательскую конфигурацию привязки, чтобы увеличить размер сообщения по умолчанию на 65536 байт. У меня проблема в том, что при использовании настроек web.config, как показано ниже, я получаю сообщение об ошибке:

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

Моя главная цель - увеличить размер сообщения по умолчанию, поэтому любая другая конфигурация приветствуется, однако я старался максимально упростить ее, чтобы избежать дальнейших проблем.

Подскажите, пожалуйста, что не так с моей конфигурацией?

<bindings>
  <basicHttpBinding>        
      <binding name="NewBinding0" closeTimeout="00:10:00" openTimeout="01:10:00"
     receiveTimeout="01:10:00" sendTimeout="01:10:00" maxBufferSize="99536"
     maxBufferPoolSize="5242880" maxReceivedMessageSize="99536">
        <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
          maxArrayLength="99536" maxBytesPerRead="99536" maxNameTableCharCount="2147483647" />
        <security>
          <transport clientCredentialType="Basic" />
        </security>

    </binding>
  </basicHttpBinding>
</bindings>
<behaviors>
  <serviceBehaviors>
    <behavior name="MeterReadingOrderWSBehaviors">
      <serviceMetadata httpsGetEnabled="true" />         
    </behavior>
    </serviceBehaviors>

</behaviors>
<services>
  <service name="MeterReadingOrderWS.IMeterReadingOrderWS" behaviorConfiguration="MeterReadingOrderWSBehaviors">
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:3440/MeterReadingOrderWS.svc"/> 
      </baseAddresses>
    </host>
    <endpoint address="" contract="MeterReadingOrderWS.IMeterReadingOrderWS" binding="basicHttpBinding" bindingConfiguration="NewBinding0" />
    <endpoint address="mex" contract="IMetadataExchange" binding="mexHttpsBinding" />
  </service>
</services>

Ответы [ 4 ]

10 голосов
/ 10 июня 2011

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

http://keithelder.net/2008/01/17/exposing-a-wcf-service-with-multiple-bindings-and-endpoints/

Надеюсь, что это может помочь и другим.

2 голосов
/ 16 февраля 2012

Обратите внимание, что ваша проблема, по-видимому, связана с поведением метаданных, перед этим вы должны проверить имя службы ieWebApplication1.MyService в приведенном ниже коде;это должно быть в том же порядке namespace.service

    <endpoint  address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="MyServiceBebavior">
      <serviceMetadata  httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<!--<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />-->

1 голос
/ 09 июня 2011

Добавить поведение для вашей службы и включить

httpGetEnabled = истина

как это:

 <behavior name="MyService.Service1Behavior">
     <serviceMetadata httpGetEnabled="true" />
 </behavior>
0 голосов
/ 09 июня 2011
<serviceMetadata httpsGetEnabled="true" />

Вы включили службу метаданных через https , но у вас есть конечная точка http для mexHttpsBinding.Вы должны использовать https для вашего адреса конечной точки.


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

Вы используете mexHttpsBinding, поэтому правильно использовать httpsGetEnabled.Если вы не хотите использовать https для метаданных, используйте httpGetEnabled и измените тип привязки для mex с mexHttpsBinding на mexHttpBinding.

    <endpoint address="mex" contract="IMetadataExchange" binding="mexHttpBinding" />
    <!--- ......- -->
    <serviceBehaviors>
       <behavior name="MeterReadingOrderWSBehaviors">
            <serviceMetadata httpGetEnabled="true" />         
       </behavior>
   </serviceBehaviors>

Если вы хотите использовать https для метаданных, рассмотрите возможность использования полной записи адреса для вашей конечной точки mex

<endpoint address="https://localhost:3440/MeterReadingOrderWS.svc/mex" contract="IMetadataExchange" binding="mexHttpsBinding" />
...