开发者

Solve WCF Error: Metadata publishing for this service is currently disabled

I want to publish a Webservice with custom binding configuration. I am using a custom binding configuration to increase the default message size of 65536 bytes. The problem I am having is that when I use the web.config settings as shown below, I am getting an error:

Metadata publishing for this service is currently disabled.

My Main goal is to be a开发者_C百科ble to increase the default message size, therefore any other config is welcome, however I was trying to keep it as simple as possible to avoid further issues.

Can you please spot what is wrong with my configuration?

<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>


I have continued my research and followed this article which solved my problem:

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

Hope it can help others as well.


Note that your problem is seems to be related with Metadata behaviour, before that you have to check name of service i.e.WebApplication1.MyService in below code; this should be in same order 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" />-->


Add behavior for your Service and enable

httpGetEnabled=true

like this:

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


<serviceMetadata httpsGetEnabled="true" />

You've enabled metadata service through https but you have a http endpoin for mexHttpsBinding. You have to use https for you endpoint address.


Edit

You use mexHttpsBinding so it's correct to use httpsGetEnabled. If you don't want https for metadata use httpGetEnabled and change binding type for mex from mexHttpsBinding to mexHttpBinding.

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

If you want to use https for metadata consider to use a full address notation per your mex endpoint

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜