我一直在尝试配置我的WCF服务以公开SOAP和Json端点。但是,这样做我似乎打破了我的MEX端点错误:
System.InvalidOperationException:在服务TestService实现的合同列表中找不到合同名称“IMetadataExchange”。将ServiceMetadataBehavior直接添加到配置文件或ServiceHost以启用对此合同的支持。
<configuration>
<system.web>
<compilation debug="true"/>
</system.web>
<!-- When deploying the service library project, the content of the config file must be added to the host's
app.config file. System.Configuration does not support config files for libraries. -->
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name ="soapBinding">
<security mode="None"/>
</binding>
</basicHttpBinding>
<webHttpBinding>
<binding name="webBinding"/>
</webHttpBinding>
<mexHttpBinding>
<binding name="mexBinding"/>
</mexHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="poxBehavior">
<webHttp/>
</behavior>
<behavior name="jsonBehavior">
<enableWebScript />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="defaultBehavior">
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="TVD_WCF_Services.TestService" behaviorConfiguration="defaultBehavior">
<host>
<baseAddresses>
<!-- note, choose an available port-->
<add baseAddress="http://localhost:8732/Design_Time_Addresses/TVD_WCF_Services/TestService/" />
</baseAddresses>
</host>
<endpoint address="soap" binding="basicHttpBinding" bindingConfiguration="soapBinding" contract="TVD_WCF_Services.ITestService" />
<endpoint address="pox" binding="webHttpBinding" bindingConfiguration="webBinding" behaviorConfiguration="poxBehavior" contract="TVD_WCF_Services.ITestService" />
<endpoint address="json" binding="webHttpBinding" bindingConfiguration="webBinding" behaviorConfiguration="jsonBehavior" contract="TVD_WCF_Services.ITestService" />
<endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="mexBinding" contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>
我确定配置有问题,但对于我的生活,我无法弄清楚它是什么。请注意,到目前为止,我没有更改除App.config之外的任何内容,所以我确定问题在于。
我在网站上查看了与此相关的各种其他问题,但无济于事。
任何可以提供帮助的WCF大师?
答案 0 :(得分:3)
在.NET 4.0框架中的单个服务上同时定义SOAP,Xml和Json端点存在问题。
只需删除Xml或Json端点,它应该没有任何问题。如果你想要两者都工作,你可以将它设置为.NET 3.5,它可以正常工作。
我已经查看了这两个框架的源代码,但是存在导致此问题的差异。
请在Microsoft connect中找到 link ,我将其作为错误提出。请进行投票,以便MS接受并在以后的版本中解决问题。
答案 1 :(得分:0)
试试这个:
<endpoint address="mex" binding="mexHttpBinding"
bindingConfiguration="mexBinding"
contract="System.ServiceModel.Description.IMetadataExchange" />
我认为contract属性需要完全限定的类型名称。
答案 2 :(得分:0)
席西斯托
确保您拥有app.config / web.config的项目具有对System.ServiceModel的引用
问候 GregJF
答案 3 :(得分:-1)
我有同样的问题。
最后,我发现我没有在主项目中引用System.ServiceModel
。
请检查参考。