【问题标题】:“Reuse types in referenced assembly” is ignored when updating a service reference更新服务引用时忽略“引用程序集中的重用类型”
【发布时间】:2014-12-01 18:49:38
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: wcf


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-20
      • 1970-01-01
      相关资源
      最近更新 更多