【问题标题】:Class names generated using Svcutil giving a problem使用 Svcutil 生成的类名有问题
【发布时间】:2011-03-15 13:54:40
【问题描述】:

我正在尝试从业务层服务在表示层中生成代理..

我的问题是我有两个具有相同名称的类被公开,尽管它们位于不同的命名空间中。

比如说,Business.AddressInfo 和 Data.AddressInfo

生成的代理将 Business 中的 AddressInfo 更改为 AddressInfo1。

如何控制它?

【问题讨论】:

    标签: wcf svcutil.exe


    【解决方案1】:

    这是标准的 WCF 行为,无法“控制” - 这就是它的工作方式。

    当 WCF 运行时/svcutil 执行“添加服务引用”时,它会读取服务文档(WSDL、XSD)并从这些描述中构建客户端代理 - 两者都是服务代理(使用调用服务)和客户端数据表示。

    WCF 客户端和服务共享的唯一内容是数据在网络上的表示 - 例如。客户端代理数据类将序列化为与服务器端类相同的 XML 格式。毕竟:WCF 是一个消息传递系统 - 除了客户端和服务器之间的序列化消息之外没有其他连接。

    这些客户端代理类会生成到您选择的命名空间中 - 您可以控制这一点,但它们始终是单独命名空间中的单独类。

    基本上有两种处理方法:

    1. 您可以在需要时使用AutoMapper 之类的东西在这些类之间进行映射;由于线路上的序列化格式相同,属性名称也相同,因此从一种对象类型映射到另一种对象类型应该非常直接和简单

    2. 如果您控制电线的两端,例如服务器和客户端都在 .NET 上,您还可以将所有服务合同、数据合同等放入单独的类库程序集中,然后在服务器和客户端之间共享该程序集。这样,当您执行“添加服务引用”时,WCF 运行时将重新使用被引用的共享程序集中的现有类型,并且不会再次创建客户端代理类。有了这个“技巧”,您的服务器和客户端都将使用来自该通用共享程序集的相同类。

    【讨论】:

      猜你喜欢
      • 2019-10-23
      • 2011-01-28
      • 2015-04-20
      • 1970-01-01
      • 2011-06-03
      • 2012-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多