我修改了我的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不存在,或类似的东西,只是没有启用元数据发布。
非常感谢任何帮助。
感谢。
答案 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服务公开了这项服务,这使得这项服务成为可能。如果你确实解决了你的问题,请传递解决方案,因为我很想知道为什么(至少在你的情况下,如果不是我们的情况)它失败了。