IMetadataExchange 的合同属性无效

Posted

技术标签:

【中文标题】IMetadataExchange 的合同属性无效【英文标题】:Invalid contract attribute for IMetadataExchange 【发布时间】:2012-09-06 16:23:30 【问题描述】:

我已将 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 上时,错误提示:

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

服务似乎运行良好。所以我很好奇为什么这是无效的。

【问题讨论】:

重新编译接口工程,然后重启Visual Studio。与所有 Microsoft 产品一样,有时您只需重新启动即可。 【参考方案1】:

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

【讨论】:

这又对我有用,我同意 BFOT,这个答案应该标记为答案.. 这对我有用。没有什么比旧帖子更能帮助您的了。 在 VS.NET 2012 中为我工作 在哪里可以找到那个 .suo 文件?我在 .sln 所在的地方找不到它。编辑:找到它 - 它是隐藏文件。 是的,它似乎工作了几分钟。然后,如果您退出或给后台编译器一个赶上的机会,它会再次出现。仅限临时救济。【参考方案2】:

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

【讨论】:

很有趣,我删除了 ServiceModel 并且它消失了。 不知何故这对我有用。我将它添加到我的服务宿主项目中。清理解决方案并重建解决方案。【参考方案3】:

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

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

【讨论】:

当然,显然这是 VS2012 通知您在任何引用的程序集中都找不到指定类型的方式 - 非常有用(但显示的消息有点神秘,我必须承认) 进入什么来添加完全指定的命名空间? 进入 app.config 以完全限定命名空间。【参考方案4】:

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

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

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

【讨论】:

我可以确认这是一个可能的原因。添加引用修复了我的项目中的错误。【参考方案7】:

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

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

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

【讨论】:

【参考方案8】:

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

【讨论】:

【参考方案9】:

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

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

【讨论】:

【参考方案10】:

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

【讨论】:

【参考方案11】:

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

【讨论】:

以上是关于IMetadataExchange 的合同属性无效的主要内容,如果未能解决你的问题,请参考以下文章

如何在 WCF 上隐藏 wsdl 信息?

设置Event.RESIZE无效的原因!?

web3 提供的地址无效,大小写校验和测试失败

Solidity - “未捕获的类型错误:无法读取未定义的属性‘合同’”

Web3 web3.eth.sendSignedTransaction 无效参数

WCF 数据合同