【问题标题】:Should I use WCF to implement a given binary network protocol?我应该使用 WCF 来实现给定的二进制网络协议吗?
【发布时间】:2011-08-17 21:25:05
【问题描述】:
我有一个客户端设备(POS 手持设备),它通过 TCP/IP 或 RS232 与其服务器进行通信。该协议是给定的二进制格式,我无法更改。我必须为该设备实现一个服务器。我的印象是,WCF 将是比手动实现任何东西更好的选择。但是因为尝试它需要相当长的时间,所以我想请教一下这是否是一个好主意,以及是否可以将 WCF 微调到如此详细的水平。
我发现了一些与我的问题相似的问题,但在这些情况下,OP 始终可以完全控制客户端和服务器。我的情况并非如此。
如果 WCF 是一个好主意 - 我假设 - 一些起点将不胜感激。大多数文档都关注 SOAP、REST 等,而不是我必须处理的较低级别。
【问题讨论】:
标签:
c#
.net
wcf
network-programming
【解决方案1】:
与 WCF 合作多年(并且喜欢它),我认为它不是满足您需求的最佳选择。正如 Phil 所提到的,它的最佳点在于 Web 服务,而不是低级别的通信。要在 WCF 中实现它,您需要编写自定义传输,与几乎所有低级(通道编程)一样,它涉及大量代码。这种传输需要使用套接字来理解设备协议,并且您需要以某种方式将协议中的消息转换为 WCF 消息。
如果协议很简单,我认为基于“纯”套接字的实现将是最好的方法。无论如何,在 WCF 解决方案中都需要套接字处理代码(与设备通信),但您可以创建自己的消息类型,而不必遵守 WCF 使用的(相当 SOAP 友好的)消息协议。
如果您要一路实现自定义 WCF 传输,该传输“谈论”该协议,您将拥有的一个优势是,如果您要将它公开给已经习惯于 WCF 的许多不同的人-实现服务的方式 - 您必须承担编写 WCF 传输的初始(非常高)成本,但后来人们可以使用 WCF 提供的良好合同模型为该设备编写服务。
【解决方案2】:
WCF 有相当长的学习曲线,如果您需要自定义很多非常低级别的东西,曲线会更陡峭。
此外,创建 WCF 的原因是让开发人员不必担心较低级别的实现细节。似乎您想要两全其美,这意味着您可能会花费大部分时间与 WCF 抗争以使其按您的意愿工作。
免责声明:虽然我对 WCF 有基本的了解,但我不是专家,我可能是错的。