解决WCF错误:此服务的元数据发布当前已禁用

时间:2011-06-09 08:56:00

标签: .net wcf web-services binding web-config

我想发布一个带有自定义绑定配置的Webservice。我使用自定义绑定配置来增加默认消息大小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 个答案:

答案 0 :(得分:9)

我继续我的研究,并按照这篇文章解决了我的问题:

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

希望它也可以帮助其他人。

答案 1 :(得分:2)

请注意,您的问题似乎与元数据行为有关,在此之前您必须检查服务名称 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" />-->

答案 2 :(得分:1)

为您的服务添加行为并启用

  

httpGetEnabled =真

像这样:

 <behavior name="MyService.Service1Behavior">
     <serviceMetadata httpGetEnabled="true" />
 </behavior>

答案 3 :(得分:0)

<serviceMetadata httpsGetEnabled="true" />

您已通过 https 启用了元数据服务,但对于mexHttpsBinding,您有 http endpoin。 您必须使用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" />