2014-12-01 79 views
1

我正在使用服务和客户端中引用的某些类型。我对我的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

发生此行为是因为当您从引用程序集选项指定重用类型时,Visual Studio会在指定的/ r标志下调用svcutil.exe。

因为svcutil.exe的使用DataContractSerializer可以生成代码,可惜这有相当strict set of rules当谈到解析服务定义(包含在WSDL定义的XSD),往往将无法生成代码。在这种情况下,svcutil.exe将切换为使用XmlSerializer,而不支持/ r标志(或重新使用)。因此,您将无法重新使用类型。

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

您也可以使用WSCF.blue来生成您的服务合约,因为它具有自己的自定义序列化器并支持类型的重用。