C# 跨不同服务中继对象
我有一个例子,其中有3台主机:a、B和C。主机C定期向主机B发送一条心跳消息,然后主机B向a发送一条类似的心跳消息,该消息包含C发送的数据包中的所有信息以及一些附加信息。显然,为了实现这一点,A向B公开服务,B向C公开服务 传递给两者的可序列化类称为C# 跨不同服务中继对象,c#,wcf,C#,Wcf,我有一个例子,其中有3台主机:a、B和C。主机C定期向主机B发送一条心跳消息,然后主机B向a发送一条类似的心跳消息,该消息包含C发送的数据包中的所有信息以及一些附加信息。显然,为了实现这一点,A向B公开服务,B向C公开服务 传递给两者的可序列化类称为NodeInfo。基本上只是一个简单的数据成员集合,NodeInfo被a和B服务的服务定义引用 关键是:B收到的数据契约类型为B.ServiceForC.NodeInfo。但是B需要中继到A的类型是A.ServiceForB.NodeInfo。因此,
NodeInfo
。基本上只是一个简单的数据成员集合,NodeInfo
被a和B服务的服务定义引用
关键是:B收到的数据契约类型为B.ServiceForC.NodeInfo
。但是B需要中继到A的类型是A.ServiceForB.NodeInfo
。因此,我发现我需要在B中编写大量重复代码,以便将数据从入站NodeInfo
复制到新创建的出站NodeInfo
我的问题是,有没有一个聪明的方法来处理这个问题?有没有办法将B.ServiceForC.NodeInfo
对象强制转换为a.ServiceForB.NodeInfo
对象,这样我就不必重新创建所有对象并复制它们的数据?因为他们没有任何遗传关系,这似乎不可能,但我不知道
我做了很多狩猎,但似乎找不到任何有用的东西。任何建议,即使是明确的“你运气不好”,都会很有帮助。谢谢。默认情况下,WCF将生成服务接口的客户端副本,该副本封装在名称空间中,用于代理代码中。但你不是被迫这样做的。将服务接口放在lib/dll中-从WCF生成的代理代码中删除WCF生成的接口,并使用其中的lib命名空间中的接口。
这样,所有内容都可以使用在lib/dll中定义的MyLibNamespace.NodeInfo接口。
如果您还没有用于公共代码的现有基本库/dll,那么您也可以在自己的接口定义中直接编译到每个应用程序中。创建这些主机之间共享的类库,并在其中保存
数据契约,而不是自动生成它们
如果您无法访问所有3段代码的源代码,则可以使用