我已将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'无效 - 枚举约束失败。
该服务似乎工作正常。所以我很好奇为什么这是无效的。
答案 0 :(得分:51)
关闭VS后可以删除.SUO(解决方案用户选项文件)文件吗?这将重置VS中XMLEditor组件的缓存并解决您的问题。
答案 1 :(得分:14)
我将System.ServiceModel添加到项目的引用中,它就消失了
答案 2 :(得分:10)
我遇到了类似的问题 - 我的WCF服务的App.Config中显示了几个name
和contract
属性,其中包含可怕的蓝色波浪形,以及错误列表中显示的警告。 / 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)
是升级项目时丢失参考吗?当包含客户的项目没有引用我的服务项目时,我注意到此错误。