更新服务引用时,将忽略“引用程序集中的重用类型”

时间:2014-12-01 18:49:39

标签: wcf

我正在使用服务和客户端中引用的一些类型。我对我的WCF服务进行了一些更改。当我尝试更新服务引用时,出现以下错误:

Metadata contains a reference that cannot be resolved. 'net.tcp//xxxx/mex

为了解决这个问题,我添加了mex end piont。

<endpoint address="mex" contract="IMetadataExchange" binding="mexTcpBindng" />

我能够更新服务参考。但即使在“配置服务引用”设置中选中“在引用的asssembly中重用类型”选项,它也会为我的客户端创建新类型。为什么要创建忽略“重用类型”设置的新类型?使用ImetadataExchnge会导致这个吗?

1 个答案:

答案 0 :(得分:2)

出现这种情况是因为当您从引用的程序集选项中指定重用类型时,Visual Studio会在指定了/ r标志的情况下调用svcutil.exe。

因为svcutil.exe使用DataContractSerializer来生成代码,不幸的是,在解析服务定义(WSDL定义中包含的XSD)时,它有一个strict set of rules,通常它会是无法生成代码。在这种情况下,svcutil.exe将切换为使用XmlSerializer,而不支持/ r标志(或重用)。因此,您将无法重复使用类型。

如果您可以引用实际的服务合同类型(通过二进制引用),这是一个更好的解决方案,因为您可以一起取消服务引用。

您还可以使用WSCF.blue生成服务合同,因为它拥有自己的自定义序列化程序并支持重复使用类型。