我确信这一定是一个非常常见的问题。我有两个WCF服务,基本上是对一个大型服务的标准访问和管理员访问。
每项服务都有类似的方法Foo
。 Foo
接受类型TemplateInfo
的参数,该参数在我的服务中定义。
在我的客户端,我引用了Client
和AdminClient
。 Client.Foo(TemplateInfo)
期待Client.TemplateInfo
而AdminClient.Foo(TemplateInfo)
期待AdminClient.TemplateInfo
。我知道,一旦达到服务Client.TemplateInfo
和AdminClient.TemplateInfo
是相同的。
我正在试图找出如何实例化TemplateInfo和/或将其转换为使用客户端和管理方法。有相当数量的代码来创建这个对象,所以我希望不要为每种类型复制它。
类型在共享程序集中定义,我在代理中“重用类型”。但是我得到了两种不同的类型,因为我有两个服务引用。
做一些像(AdminClient)TemplateInfo这样的事情会很棒,但也许我会创建一个克隆方法来转换类型。
答案 0 :(得分:4)
没有办法做到这一点。它们是不同的类型。
您可以将该类型放入由两个服务和客户端引用的类库中。您可以告诉“添加服务引用”以重用类型(这是默认值),然后它将是使用的类库中的类型。
请注意,客户端应用程序还需要引用与两个服务相同的类库。
答案 1 :(得分:1)
要完全生成服务引用,您可以将服务类型放在客户端和服务之间的共享程序集中,并在生成客户端类时检查“重用引用程序集中的类型”或类似的内容。
答案 2 :(得分:1)
你可以这样做但通常不被认为是个好主意。原因是它将您的客户和服务紧密地联系在一起。如果你控制了客户端和两个服务,并考虑到当你对其中一个服务进行更改时可能会破坏客户端,那么只考虑这样做。
如果你使用的是visual studio,理查德已经打败了我,并提供了一些关于如何做到这一点的提示。
但是
面向服务架构的一个主要原则是"服务共享架构和契约,而不是类"。
有很多好文章比我能更好地解释这一点。维基百科是一个好的开始,或者当WCF有一个很酷的名字时,就会有这篇文章。 http://msdn.microsoft.com/en-us/magazine/cc164026.aspx