从WCF服务转换类型

时间:2011-03-08 19:37:06

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

我确信这一定是一个非常常见的问题。我有两个WCF服务,基本上是对一个大型服务的标准访问和管理员访问。

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

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

我正在试图找出如何实例化TemplateInfo和/或将其转换为使用客户端和管理方法。有相当数量的代码来创建这个对象,所以我希望不要为每种类型复制它。

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

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

3 个答案:

答案 0 :(得分:4)

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

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


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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

你可以这样做但通常不被认为是个好主意。原因是它将您的客户和服务紧密地联系在一起。如果你控制了客户端和两个服务,并考虑到当你对其中一个服务进行更改时可能会破坏客户端,那么只考虑这样做。

如果你使用的是visual studio,理查德已经打败了我,并提供了一些关于如何做到这一点的提示。

但是

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

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