跨不同服务中继对象

时间:2011-10-29 21:31:39

标签: c# wcf

我有一个案例,其中有3个主机:A,B和C.主机C定期向主机B发送心跳消息,主机B然后向A发送类似的心跳消息,其中包含发送的数据包中的所有信息由C加上一些额外的东西。显然,要启用此功能,A会将服务公开给B,而B会将服务公开给C.

传递给两者的可序列化类称为NodeInfo。基本上只是一个简单的数据成员集合,{A}和B的服务的服务定义引用了NodeInfo

以下是踢球者:B收到的数据合同属于B.ServiceForC.NodeInfo。但是B需要中继到A的类型是A.ServiceForB.NodeInfo类型。所以我发现我需要做的是在B中编写大量重复代码,将数据从入站NodeInfo复制到一些新创建的出站NodeInfo

我的问题是,有一种聪明的方法可以解决这个问题吗?有没有办法将B.ServiceForC.NodeInfo对象强制转换为A.ServiceForB.NodeInfo对象,这样我就不必重新创建所有对象并复制它们的数据了?因为它们在任何遗传意义上都不相关,所以似乎不可能,但我不知道。

我做了很多狩猎,但似乎找不到任何有用的东西。任何建议,即使它是一个明确的“你运气不好”,也会有所帮助。感谢。

2 个答案:

答案 0 :(得分:1)

默认情况下,WCF生成服务接口的客户端副本,其中包含在代理代码中使用的命名空间。但你并没有被迫这样做。将服务接口放在lib / dll中 - 从WCF生成的代理代码中删除WCF生成的接口,然后使用lib命名空间中的接口。
这样一切都可以使用你的lib / dll中定义的MyLibNamepace.NodeInfo接口 如果您还没有公共代码的现有基础lib / dll,那么您也可以直接将自己的接口定义编译到每个应用程序中。

答案 1 :(得分:1)

创建在这些主机之间共享的类库,并在其中保存DataContract,而不是自动生成它们。

如果您无法访问所有3段代码的源代码,则可以使用AutoMapper