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 中显示了几个 name
和 contract
属性,并带有可怕的蓝色波浪,并且错误列表中显示了警告。
在我的情况下,问题是在创建服务和合同后,我重构了服务项目的命名空间,因此生成的特定于解决方案的 *.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 中服务元素“
顺便说一句。抱歉英语不好:)
【讨论】:
【参考方案10】:我在客户端遇到了同样的问题。对我来说,解决方案是删除并再次添加服务引用。
【讨论】:
【参考方案11】:可能是您在升级项目时丢失了参考资料?当包含我的客户的项目没有使用我的服务引用我的项目时,我注意到了这个错误。
【讨论】:
以上是关于IMetadataExchange 的合同属性无效的主要内容,如果未能解决你的问题,请参考以下文章
Solidity - “未捕获的类型错误:无法读取未定义的属性‘合同’”