.net 用WCF替换TCP/IP管道

.net 用WCF替换TCP/IP管道,.net,wcf,remoting,.net,Wcf,Remoting,因此,目前我的公司正在使用TCP/IP连接在服务器和客户端程序之间进行通信,现在我们正在使用System.RunTime.Remoting构建此连接,它笨重且不太可靠。它是大约5年前建立的,模型不断被重用,它开始传播一些问题、使用的端口、拒绝的连接等 我试图找到一些关于如何将其转换为WCF的资源,但我不确定我在寻找什么或应该搜索什么 如果您想了解更多关于我们实际使用它的信息,我可以深入了解一些细节,但我需要调出代码并确保完整地解释它 谢谢 有一篇很老但很好的文章叫“”,你应该看看 我自己做了很多

因此,目前我的公司正在使用TCP/IP连接在服务器和客户端程序之间进行通信,现在我们正在使用System.RunTime.Remoting构建此连接,它笨重且不太可靠。它是大约5年前建立的,模型不断被重用,它开始传播一些问题、使用的端口、拒绝的连接等

我试图找到一些关于如何将其转换为WCF的资源,但我不确定我在寻找什么或应该搜索什么

如果您想了解更多关于我们实际使用它的信息,我可以深入了解一些细节,但我需要调出代码并确保完整地解释它


谢谢

有一篇很老但很好的文章叫“”,你应该看看

我自己做了很多远程处理,在封闭的环境中,我仍然认为它有它的位置。特别是在速度问题上。(我有点不同意远程处理是不可靠的。对于局域网通信,我一点问题也没有。)

我更喜欢WCF的是,您必须创建代理对象,然后运行调用。您可以更容易地看到您正在进行远程呼叫。远程处理在某种程度上隐藏了这一点

需要注意的一点是,在WCF上设置事件比在远程处理上做更多的工作,但这是一个很小的代价。一旦您了解了WCF以及如何为特定场景优化配置它,您就不会回头了。它比远程处理灵活得多,并且可以在更远的距离上使用,远程处理并不擅长(根据我的经验)


请务必根据您的需要在WCF中选择一个传输通道,即tcp、命名管道或soap。

Mikael在他的文章中已经提到了大部分相关的要点,选择
netTcpBinding
,它速度非常快,在LAN环境中工作得非常好,并且具有您应该需要的所有功能

主要的区别在于思维方式的改变:在远程处理中,您基本上使用的是“远程对象”——您或多或少地远程控制另一台机器上现有的.NET对象

WCF从根本上讲是非常不同的:您有一个服务器和一个客户机,它们共享的不仅仅是服务契约(方法的描述)和数据契约(传递的数据的描述)。在运行时,您对客户端上的代理进行调用,WCF运行时截取该调用,对其进行序列化(包括所有参数),然后通过网络发送序列化消息(在
netTcpBinding
的情况下为二进制序列化)

另一端的服务器有一个运行时组件,用于侦听这些消息,并将它们从线路上抓取下来,展开它们,然后调用服务实例来运行所需的方法

重要的部分是:它是一个基于消息的系统-除了契约(以XML模式表示的服务接口和数据结构)之外,双方在运行时没有连接

这也意味着:服务器没有办法与客户端“联系”,并找到一些信息或询问更多信息。服务需要处理的只是消息和您(或WCF运行时)可能发送的任何潜在消息头。就这样

另外:由于数据交换通过序列化消息进行,并且需要符合XML模式标准,因此不能使用接口或泛型之类的东西—只能传递类的具体实例


总而言之,WCF确实在某种程度上取代了.NET远程处理,但在某些方面,它是一个完全不同的野兽。这有优点也有缺点,但你只需要意识到这些差异,不要试图与之抗争——要么你可以自己安排这些差异,甚至从中受益,要么就不要在手头的工作中使用WCF。

你到底在寻找什么?想了解更多关于WCF的信息吗?我知道如何使用现有的WCF服务,或者WCF数据服务,只是想学习如何实现一个。我应该澄清一下远程处理并不不可靠,我们的实现是不可靠的,我想我最好在修复它的同时升级它。