gpt4 book ai didi

c# - 我应该将 WCF 用于简单的文本有线协议(protocol)吗?

转载 作者:行者123 更新时间:2023-11-30 15:45:14 26 4
gpt4 key购买 nike

我需要编写一个程序来与其他 .NET 程序进行通信……而且还需要编写一个基于 TCP 的遗留 VFP 程序。我需要选择 VFP 程序员可以使用的相当简单的 TCP 消息格式。它可以像一系列由...分隔的小 XML blob 一样简单,我不知道,一个空字符?随便。

我需要在 TcpListener/TcpClient 和 WCF 之间做出选择。我开始研究 WCF,但它的体系结构似乎不透明,并且内置的 Visual Studio 模板严重偏向于使“Web 服务”充当一种 RPC 机制,但需要应用程序外部的特殊“主机”或 Web 服务器.还有微软的6-stage tutorial使 WCF 听起来很麻烦(涉及代码生成器、命令行和 XML 废话,只是为了远程减去或乘以两个数字)。

我想要一个独立的应用程序(没有“主机”),我想要控制有线协议(protocol),并且我想了解它是如何工作的。WCF 似乎没有促进这些事情,所以我在 TcpListener/TcpClient 的因素中放弃了它。

但是,该程序将充当单个 (VFP) 服务器和多个 (.NET) 客户端之间的中介,并且会在两个方向和不同的连接之间进行通信。使用 TcpListenerTcpClient,处理连接和线程的工作变得有点困惑,我没有使用 IAsyncResult 的经验,而且我'我不仅对我的代码质量没有信心。

所以再次征求意见:是否还要考虑WCF呢?如果是,您能否指出以下问题的答案?

  1. 网络上哪里有对 WCF 架构的很好解释?或者我需要一本书吗?
  2. 在 WCF 中如何进行双向通信,其中(单个 TCP 连接的)任何一方都可以随时发送消息?
  3. 我怎样才能绕过所有网络服务和 RPC mumbo-jumbo,并控制有线协议(protocol)?
  4. 在 WCF 中,我如何干净地关闭应用程序,同时关闭所有连接而不使用 hacky Thread.Abort() 命令?

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

最佳答案

简短的回答:使用 WCF。虽然有大量的工具和代码生成以及其他花哨的功能,但没有什么可以阻止您在代码中设置所有内容(您可以定义契约(Contract)、设置端点等,所有这些都在代码中)。

针对您的具体问题:

  1. WCF Architecture - 这是非常基础的,应该可以让您相对快速地启动和运行。
  2. 您要找的是 duplex services .NetTcpBinding 允许开箱即用的双工服务(尽管您可以使用 HTTP 来实现,但您需要特定的绑定(bind))。
  3. 如果你想控制有线格式,你会想要创建一个custom encoder .但是,我必须强烈反对它。您想创建一个包含空字符的 XML 文件来描述单独的消息吗?没必要,XML 的本质是您可以创建子元素来执行适当的分组;可以嵌套的元素数量没有限制。真的没有这个必要。
  4. 简单地关闭 ServiceHost调用Close ,这将允许所有未完成的请求完成,然后正常关闭。如果真的要毫不顾虑的拆,那就打Abort .

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

关于c# - 我应该将 WCF 用于简单的文本有线协议(protocol)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5398982/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com