【问题标题】:Converting type from a WCF service从 WCF 服务转换类型
【发布时间】:2011-07-11 09:01:58
【问题描述】:

我确定这一定是一个很常见的问题。我有两个 WCF 服务,它们基本上公开了对一个更大的服务的标准访问权限和管理员访问权限。

每个服务都有一个类似的方法FooFoo 接受 TemplateInfo 类型的参数,该参数在我的服务中定义。

在我的客户端上,我引用了 ClientAdminClientClient.Foo(TemplateInfo) 期望 Client.TemplateInfoAdminClient.Foo(TemplateInfo) 期望 AdminClient.TemplateInfo。我知道一旦达到服务Client.TemplateInfoAdminClient.TemplateInfo 是同一回事。

我试图弄清楚如何实例化 TemplateInfo 和/或将其强制转换为与客户端和管理方法一起使用。有大量的代码来创建这个对象,所以我希望不要为每种类型重复。

类型是在共享程序集中定义的,我在我的代理中“重用类型”。但是我得到了两种不同的类型,因为我有两个服务引用。

像 (AdminClient)TemplateInfo 这样的事情会很棒,但也许我会创建一个克隆方法来转换类型。

【问题讨论】:

    标签: c# wcf type-conversion wcf-client


    【解决方案1】:

    没有办法做到这一点。它们是不同的类型。

    您可以将该类型放入服务和客户端都引用的类库中。您可以告诉“添加服务引用”重用类型(这是默认值),然后它将是使用的类库中的类型。


    请注意,客户端应用程序还需要引用与这两个服务相同的类库。

    【讨论】:

    【解决方案2】:

    除了完全生成服务引用之外,您还可以将服务类型放在客户端和服务之间的共享程序集中,并在生成客户端类时选中“在引用的程序集中重用类型”或类似的内容。

    【讨论】:

      【解决方案3】:

      您可以这样做,但通常认为这不是一个好主意。原因是它将您的客户和服务紧密耦合在一起。仅当您可以控制客户端和这两种服务时才考虑这样做,并且准备好应对当您对其中一项服务进行更改时可能会破坏客户端的事实。

      如果您使用 Visual Studio,Richard 提供了一些关于如何执行此操作的提示。

      但是

      面向服务架构的主要原则之一是“服务共享架构和契约,而不是类”。

      有很多好文章比我能更好地解释这一点。 Wikipedia 是一个好的开始,或者当 WCF 有一个很酷的名字时,就有这篇文章。 http://msdn.microsoft.com/en-us/magazine/cc164026.aspx

      【讨论】:

      • 我明白你的意思。这是针对与这两个服务相同的解决方案中的一些功能测试。我认为我需要在服务级别上进行一些其他更改,以启用服务之间的类似功能。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-10
      • 1970-01-01
      • 2016-08-19
      相关资源
      最近更新 更多