IMetadataExchange 的合约属性无效



我已经将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"无效 - 枚举约束失败。

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

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

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

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

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

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

如果你在警告上运行智能感知。它将弹出一个列表供您选择,您可以从中显式调用该成员。

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

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

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

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

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

我已经解决了这个问题。如果您曾经在 Service1.cs 和 IService1.cs 中更改 C# 类。还要更新 App.config 中服务元素"<命名空间>."中的 name 属性和 endpoind 元素"."中的协定属性。

顺便说一句,对不起英语不好:)

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

可能是您在升级项目时丢失了引用吗?当我包含客户端的项目没有引用我的服务项目时,我注意到了此错误。

最新更新