38

我已将 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在错误上时说:

“合同”属性无效 - 根据其数据类型“服务合同类型”,值“IMetadataExchange”无效 - 枚举约束失败。

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

4

11 回答 11

53

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

于 2012-09-25T06:19:32.323 回答
18

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

于 2014-05-11T20:37:20.413 回答
10

我有一个类似的问题 - 我的 WCF 服务的 App.Config 中显示了几个namecontract属性,带有可怕的蓝色波浪,并且错误列表中显示了警告。

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

于 2013-07-17T16:03:17.267 回答
7

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

于 2013-08-22T12:31:21.850 回答
3

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

于 2013-05-15T14:42:16.073 回答
3

如果您在警告上运行 Intellisense。它将显示一个列表供您选择,您可以显式调用该成员。

于 2013-03-12T22:00:11.850 回答
2

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

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

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

于 2018-01-15T21:18:35.677 回答
1

关闭 VS2013 Prof,删除“obj”文件夹并重新编译已经为我完成了这项工作。

于 2016-03-04T07:16:06.210 回答
0

我已经解决了这个问题。如果您曾经更改 Service1.cs 和 IService1.cs 中的 C# 类。还要更新 App.config 中服务元素“<namespace>.<classname>”中的 name 属性和 endpointd 元素“<namespace>.<classname>”中的 contract 属性。

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

于 2016-12-22T02:01:54.420 回答
0

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

于 2018-04-16T12:49:18.040 回答
0

升级项目时是否丢失了参考资料?当包含我的客户的项目没有使用我的服务引用我的项目时,我注意到了这个错误。

于 2019-05-01T22:51:53.100 回答