IMetadataExchange的合同属性无效

问题描述 投票:35回答:11

我已将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约束失败。

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

wcf
11个回答
52
投票

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


0
投票

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


0
投票

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


14
投票

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


10
投票

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

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


7
投票

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


3
投票

如果您在警告上运行Intellisense。它会显示一个列表供您选择,您可以明确地呼叫该成员。


3
投票

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


1
投票

关闭VS2013教授,删除“obj”文件夹并重新编译已经完成了我的工作。


1
投票

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

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

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


0
投票

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

BTW。抱歉英文不好:)

© www.soinside.com 2019 - 2024. All rights reserved.