Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 跨不同服务中继对象_C#_Wcf - Fatal编程技术网

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。因此,

我有一个例子,其中有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
。因此,我发现我需要在B中编写大量重复代码,以便将数据从入站
NodeInfo
复制到新创建的出站
NodeInfo

我的问题是,有没有一个聪明的方法来处理这个问题?有没有办法将
B.ServiceForC.NodeInfo
对象强制转换为
a.ServiceForB.NodeInfo
对象,这样我就不必重新创建所有对象并复制它们的数据?因为他们没有任何遗传关系,这似乎不可能,但我不知道


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

默认情况下,WCF将生成服务接口的客户端副本,该副本封装在名称空间中,用于代理代码中。但你不是被迫这样做的。将服务接口放在lib/dll中-从WCF生成的代理代码中删除WCF生成的接口,并使用其中的lib命名空间中的接口。
这样,所有内容都可以使用在lib/dll中定义的MyLibNamespace.NodeInfo接口。

如果您还没有用于公共代码的现有基本库/dll,那么您也可以在自己的接口定义中直接编译到每个应用程序中。

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

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