IMetadataExchange的合同属性无效

时间:2012-09-13 14:32:11

标签: wcf

我已将WCF服务升级到.NET Framework 4.5。在这样做之后,我注意到主机配置文件中IMetaDataExchange周围有一条蓝色波浪线。

这就是配置的服务部分:

<services>
    <service behaviorConfiguration="MyBehavior" name="MyServiceHost">
        <endpoint binding="wsHttpBinding" bindingConfiguration="noSecurityBinding" contract="MyServiceContract"/>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>

当我将鼠标悬停在IMetadataExchange上时,错误显示为:

  

'contract'属性无效 - 根据数据类型'serviceContractType',值'IMetadataExchange'无效 - 枚举约束失败。

该服务似乎工作正常。所以我很好奇为什么这是无效的。

11 个答案:

答案 0 :(得分:51)

关闭VS后可以删除.SUO(解决方案用户选项文件)文件吗?这将重置VS中XMLEditor组件的缓存并解决您的问题。

答案 1 :(得分:14)

我将System.ServiceModel添加到项目的引用中,它就消失了

答案 2 :(得分:10)

我遇到了类似的问题 - 我的WCF服务的App.Config中显示了几个namecontract属性,其中包含可怕的蓝色波浪形,以及错误列表中显示的警告。 / p>

在我的情况下,问题是在创建服务和合同之后我重构了服务项目的名称空间,因此生成的解决方案特定的* .xsd使用了新的名称空间,但我的重构工具还没有更新App .Config与变化。进入并添加完全指定的命名空间解决了这个问题。

答案 3 :(得分:7)

也许不是OP的答案,但是有这个问题的其他人应检查是否为您的服务的[ServiceContract]声明了interface,因为这会产生确切的错误。

答案 4 :(得分:3)

如果你在警告上运行Intellisense。它会显示一个列表供您选择,您可以明确地呼叫该成员。

答案 5 :(得分:3)

如果删除.SUO文件不起作用,请检查您的引用以确保您具有System.ServiceModel引用。最终成为让我来到这里的问题。

答案 6 :(得分:1)

关闭VS2013教授,删除&#34; obj&#34;文件夹和重新编译已经完成了我的工作。

答案 7 :(得分:1)

我发现问题是contract属性区分大小写。

我有一个不同的解决方案引用了相同的服务,但在app.config中没有任何警告。我在app.config的system.serviceModel部分用notepad ++运行了比较,它突出显示了两个合同属性之间的区别。

一旦我将合同属性修改为正确的区分大小写拼写,警告就会立即消失

答案 8 :(得分:0)

我已经解决了这个问题。 如果您在Service1.cs和IService1.cs中更改了C#类。还要更新服务元素“&lt; namespace&gt;。&lt; classname&gt;”中的name属性。 endpoind元素中的和contract属性“&lt; namespace&gt;。&lt; classname&gt;”在你的App.config中。

顺便说一句。抱歉英语不好:)

答案 9 :(得分:0)

我在客户端遇到了同样的问题。对我来说,解决方案是再次删除并添加服务引用。

答案 10 :(得分:0)

是升级项目时丢失参考吗?当包含客户的项目没有引用我的服务项目时,我注意到此错误。