WCF Web服务元数据发布已禁用错误

时间:2010-08-04 14:56:59

标签: web-config wcf metadata wcf-configuration

我修改了我的web.config以添加自定义绑定以增加缓冲区和消息大小,似乎在显式创建服务元素时,它以某种方式破坏了对我的行为元素的引用。

当我尝试使用WCF测试客户端从VS运行我的Web服务时,或者我转到服务页面时,出现错误:

Metadata publishing for this service is currently disabled.

我已经将我的web.config与几个不同的来源进行了比较,一切似乎都匹配。我不知道问题是什么。

这是System.serviceModel元素:

<system.serviceModel>    
<services>
  <service name="BIMIntegrationWS.BIMIntegrationService" behaviorConfiguration="metadataBehavior">
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    <endpoint address="http://localhost:1895/BIMIntegrationService.svc" 
              binding="customBinding" bindingConfiguration="customBinding0" 
              contract="BIMIntegrationWS.IBIMIntegrationService"/>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="metadataBehavior">
      <!-- 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="true"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
<bindings>
  <customBinding>
    <binding name="customBinding0">
      <binaryMessageEncoding />
      <httpTransport maxReceivedMessageSize="262064"
                   maxBufferSize="262064"
                   maxBufferPoolSize="262064" />
    </binding>
  </customBinding>
</bindings>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"  aspNetCompatibilityEnabled="true"/>

几乎看起来Web服务页面都没有找到元素。我没有收到错误,抱怨目标behaviorConfiguration不存在,或类似的东西,只是没有启用元数据发布。

非常感谢任何帮助。

感谢。

2 个答案:

答案 0 :(得分:2)

我想我已经“修复”了这个问题。更多晚些时候。

编辑: 为了“解决”我的问题,我基本上为我的应用程序添加了一个新的WCF服务,并让它实现了我以前的界面,然后我复制了原始服务中的所有代码,当我调整.config文件时(看起来很漂亮)很像问题中的那个),一切都很好。

当然,我知道,就像我们都知道的那样,这里没有魔力,必定存在一些差异。这是我注意到/记得的,在我创建了我的原始服务,名为“BIMIntegrationService.svc”之后,我认为这个名字太长了,所以我将我的类重命名/重构为“BIMIntegrationWS”。但是,执行此操作不会更改服务文件的名称(因此也不会更改http://地址中文件的名称)。

长话短说,我对.config进行了2次更改,一切正常:

1)我改变了:

<service name="BIMIntegrationWS.BIMIntegrationService" behaviorConfiguration="metadataBehavior">

<service name="BIMIntegrationWS.BIMIntegrationWS" behaviorConfiguration="metadataBehavior">

在运行这样的服务之后,我收到一个错误(这次是一个有用的错误)抱怨如果启用了multipleSiteBindings,则端点地址必须是相对的。所以:

2)我把它设置为假(因为我不记得为什么它首先在那里)并且一切正常。

我想当我的网络服务似乎没有使用我的“服务”元素时,我应该采取一些提示。 :\

编辑2:

实际上,您可以在我的第二条评论中看到,在原始问题中,自动生成的标记指向:,而不是“BIMIntegrationService”。 那本应该放弃它。

我怀疑很多其他人会遇到同样的问题,但为了以防万一。

答案 1 :(得分:0)

我遇到了同样的麻烦;我已经正确配置了所有内容(甚至从我之前运行的服务中复制了代码),但是在允许服务公开元数据方面没有任何变化。然而,如果我向app.config发出拼写错误,解析错误等,我会给出异常,告诉我纠正问题(告诉我服务正在读取配置,只是忽略它。

我可以通过在主机应用程序中生成配置设置来绕过它:

System.ServiceModel.Description.ServiceMetadataBehavior smb = new System.ServiceModel.Description.ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
ServiceBase host = new Servicebase(typeof(MyService), new Uri("http://localhost:1234/"));
host.Description.Behaviors.Add(smb);
host.Open();

...

host.Close();

基本上允许代码覆盖并推送我想要应用的配置文件更改。我知道它并不理想,但我通过Windows服务公开了这项服务,这使得这项服务成为可能。如果你确实解决了你的问题,请传递解决方案,因为我很想知道为什么(至少在你的情况下,如果不是我们的情况)它失败了。