ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

我应该为简单的文本有线协议使用WCF吗?

2019-11-02 21:09:20  阅读:177  来源: 互联网

标签:visual-foxpro architecture wcf c net


我需要编写一个程序,该程序可以与其他.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?如果是,您能指出以下问题的答案吗?

>在Web上哪里可以很好地解释WCF的体系结构?还是我需要一本书?
>如何在WCF中进行双向通信,在WCF中,任一方(单个TCP连接)可以随时发送消息?
>如何才能通过所有Web服务和RPC mumbo-jumbo,并控制有线协议?
>在WCF中,如何干净地关闭应用程序,并并行关闭所有连接,而无需使用hack.Thread.Abort()命令?

如果否,如何设置我的代码(使用TcpListener / TcpClient / NetworkStream),以便可以从NetworkStream中读取消息,还可以接受来自其他连接的请求,可以随时干净地关闭,并避免浪费CPU时间轮询不活动的队列和NetworkStreams?

解决方法:

简短的答案:使用WCF.尽管有大量的工具和代码生成以及周围的其他信息,但是没有什么可以阻止您在代码中设置所有内容(您可以在代码中定义合同,设置端点等).

对于您的具体问题:

> WCF Architecture-这是非常基本的操作,它可以使您快速启动并运行.
>您正在寻找的是duplex services.NetTcpBinding允许开箱即用的双工服务(尽管您可以使用HTTP进行此操作,但需要特定的绑定).
>如果要控制线路格式,则需要创建custom encoder.但是,我强烈建议您反对.您要创建一个具有空字符的XML文件来描绘单独的消息吗?不需要这样做,XML的本质是您可以创建子元素来执行适当的分组.可以嵌套多少个元素没有限制.确实没有必要.
>只需通过调用Close关闭ServiceHost,将允许所有未完成的请求完成,然后正常关闭.如果您确实要拆除而不必担心,请致电Abort.

最后,我强烈建议您不要使用NetTcpBinding. VFP将很难使用该协议.但是,如果您使用基于HTTP的协议,则总是有一些工具可供VFP轻松使用以进行调用和使用内容(假设您坚持使用XML).

标签:visual-foxpro,architecture,wcf,c,net
来源: https://codeday.me/bug/20191102/1994168.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有