我需要编写一个与其他.NET程序通信的程序......还需要一个基于TCP的传统VFP程序。我需要选择VFP程序员可以使用的相当简单的TCP消息格式。它可以像一系列由...分隔的小XML blob一样简单。我不知道,一个空字符?不管。
我需要在TcpListener / TcpClient和WCF之间进行选择。我开始研究WCF,但它的体系结构似乎不透明,内置的Visual Studio模板非常偏向于使“Web服务”像一种RPC机制,但需要一个特殊的“主机”或应用程序外部的Web服务器。微软的6-stage tutorial使得WCF听起来非常麻烦(涉及代码生成器,命令行和XML垃圾只是为了远程减去或乘以两个数字)。
我想要一个独立的应用程序(没有“主机”),我想要控制有线协议,我想了解它是如何工作的。 WCF似乎不方便这些东西,所以我把它放在TcpListener / TcpClient因子中。
但是,该程序将作为单个(VFP)服务器和许多(.NET)客户端之间的中介,并且将在两个方向和不同连接之间进行通信。使用TcpListener
和TcpClient
,处理连接和线程的工作变得有点混乱,我没有使用IAsyncResult
的经验,而且我不仅对我的代码质量没有信心
所以我想再次征求意见:我还应该考虑WCF吗?如果是,您能指出我对以下问题的答案吗?
如果不是,我如何设置我的代码(使用TcpListener / TcpClient / NetworkStream)以便我可以从NetworkStream读取消息,但也接受来自其他连接的请求,随时关闭,并避免浪费CPU时间来轮询无效的队列和NetworkStream?
答案 0 :(得分:3)
答案简短:跟WCF一起去吧。虽然它周围有大量的工具和代码生成以及其他花哨的东西,但没有什么能阻止你在代码中设置所有东西(你可以定义你的合同,设置端点等等所有代码)。
针对您的具体问题:
最后,我强烈建议你不要使用NetTcpBinding; VFP将很难耗费协议。但是,如果您使用基于HTTP的协议,则VFP始终可以轻松使用这些工具进行调用并使用内容(假设您坚持使用XML)。
答案 1 :(得分:1)
为了解决使用DCOM的常见问题,VFP可以使用DCOM,但需要使用CreateObjectEx()...唯一的区别是你需要知道你要连接的类实例的GUID在它连接的任何服务器上,以及它要连接的机器名称。
然后远程对象通过公开的函数完成它的工作,但VFP从网络上的其他一些机器调用它就像对待本地函数一样处理它并获得返回值。
我甚至早在10年前就为一家保险公司做过VOM DCOM ......