直接浏览时,WCF元数据不可用

时间:2011-12-01 00:40:42

标签: .net wcf metadata

当我浏览.svc时,我不断收到错误:此服务的元数据发布目前已被禁用。

我已按照错误页面上列出的所有说明进行操作(添加行为,引用行为,添加mex端点,尝试使用和不使用baseaddress),以及MSDN上的说明:http://msdn.microsoft.com/en-us/library/ms734765.aspx(几乎相同,但包括政策转换)。我甚至摧毁了我的配置文件,只留下了这些东西 - 它根本没有任何区别。我已经确认正在使用配置文件(即在其中出错,并且错误发生了变化)。

部分看起来像:

<system.serviceModel>
  <services>
    <service name="HoldingService" behaviorConfiguration="SimpleServiceBehavior">
      <host>
        <baseAddresses>
          <add baseAddress="http://localhost/xxxx.cdf.holding/HoldingService.svc"/>
        </baseAddresses>
      </host>
      <endpoint address=""
                binding="basicHttpBinding"
                contract="Xxx.Xxxx.Schema.Service.Cdf.Holding.IHoldingService" />
      <endpoint address="mex"
                binding="mexHttpBinding"
                contract="IMetadataExchange" />
    </service>
  </services>
  <behaviors>
    <serviceBehaviors>
      <behavior name="SimpleServiceBehavior">
        <serviceMetadata httpGetEnabled="True" policyVersion="Policy15" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
</system.serviceModel>

有没有办法修复或调试它?

2 个答案:

答案 0 :(得分:3)

我设法解决了这个问题。问题是name="HoldingService"。即使.svc与.config在同一个项目中,它也需要完全限定(即name="Xxx.Xxxx.Web.Cdf.Holding.HoldingService")。

最终代码看起来像这样并且完美运行:

<system.serviceModel>
  <services>
    <service name="Xxx.Xxxx.Web.Cdf.Holding.HoldingService" behaviorConfiguration="SimpleServiceBehavior">
      <endpoint address=""
                binding="basicHttpBinding"
                contract="Xxx.Xxxx.Schema.Service.Cdf.Holding.IHoldingService" />
    </service>
  </services>
  <behaviors>
    <serviceBehaviors>
      <behavior name="SimpleServiceBehavior">
        <serviceMetadata httpGetEnabled="True" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
</system.serviceModel>

顺便说一句,我最终解决此问题的方法是使用“Microsoft服务配置编辑器”(可通过​​VS2010中的Tools&gt; WCF Service Configuration Editor访问)。我不知道这个存在并且一直在手动切割配置。

感谢迈克尔的建议 - 他们清理了很多代码。

答案 1 :(得分:1)

可能很傻,但请尝试从serviceMetadata行为中删除策略版本。我从来没有见过这种需要。您也可以删除mex端点,然后浏览到...

http://localhost/xxxx.cdf.holding/HoldingService.svc

mex端点用于通过命名管道等进行元数据交换。只要你有一个http端点,就应该这样做。

此外,由于您在IIS中托管,看起来可能没有使用基址。只需删除该部分,然后转到IIS中的svc文件。