我已将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'属性无效 - 值'IMetadataExchange'根据其数据类型'serviceContractType'无效 - Enumeration约束失败。
该服务似乎工作正常。所以我很好奇为什么这是无效的。
关闭VS后可以删除.SUO(解决方案用户选项文件)文件吗?这将重置VS中XMLEditor组件的缓存并解决您的问题。
我在客户端遇到了同样的问题。对我来说,解决方案是再次删除并添加服务引用。
升级项目时,您是否丢失了引用?当我的包含我的客户端的项目没有引用我的服务项目时,我注意到了这个错误。
我将System.ServiceModel添加到项目的引用中,它就消失了
我有一个类似的问题 - 几个name
和contract
属性显示在我的WCF服务的App.Config中,带有可怕的蓝色波浪形,并在错误列表中显示警告。
在我的情况下问题是,在创建服务和合同后,我重构了服务项目的名称空间,因此生成的特定于解决方案的* .xsd使用了新的名称空间,但我的重构工具没有更新App.Config变化。进入并添加完全指定的命名空间修复了该问题。
也许不是OP的答案,但是有这个问题的其他人应该检查[ServiceContract]
是否为你的服务的interface
声明,因为这会产生确切的错误。
如果您在警告上运行Intellisense。它会显示一个列表供您选择,您可以明确地呼叫该成员。
如果删除.SUO文件不起作用,请检查您的引用以确保您具有System.ServiceModel引用。最终成为让我来到这里的问题。
关闭VS2013教授,删除“obj”文件夹并重新编译已经完成了我的工作。
我发现问题是contract属性区分大小写。
我有一个不同的解决方案引用了相同的服务,但在app.config中没有任何警告。我在app.config的system.serviceModel部分用notepad ++运行了比较,它突出显示了两个合同属性之间的区别。
一旦我将合同属性修改为正确的区分大小写拼写,警告就会立即消失
我已经解决了这个问题。如果您在Service1.cs和IService1.cs中更改了C#类。还要更新服务元素“<namespace>。<classname>”中的name属性和app.config中endpoind元素“<namespace>。<classname>”中的contract属性。
BTW。抱歉英文不好:)