我应该使用WCF来实现给定的二进制网络协议吗?

时间:2011-08-17 21:25:06

标签: c# .net wcf network-programming

我有一个客户端设备(POS手持设备),它通过TCP / IP或RS232与它的服务器通信。协议是给定的二进制格式,我无法改变。我必须为该设备实现一个服务器。我的印象是,WCF比手动实现任何东西都更好。但是因为它需要相当长的时间才能尝试一下,我想请教一下这是一个好主意,以及是否可以将WCF微调到如此高的细节水平。

我发现了一些类似于我的问题,但在这些情况下,OP始终完全控制客户端和服务器。对于我的情况,情况并非如此。

如果WCF是一个好主意 - 我认为 - 一些起点将非常感激。大多数文档都关注SOAP,REST,...而不是我必须处理的较低级别。

2 个答案:

答案 0 :(得分:4)

与WCF合作多年(并且喜欢它),我认为这不是满足您需求的最佳选择。正如菲尔所说,它的最佳点是围绕着网络服务,而不是低级别的沟通。要在WCF中实现它,您需要编写一个自定义传输,与几乎所有的低级(通道编程)一样,它涉及大量代码。此传输需要使用套接字来理解设备协议,并且您需要以某种方式将协议中的消息转换为WCF消息。

如果协议很简单,我认为基于套接字的“纯”套接字是最好的方法。无论如何,在WCF解决方案中都需要套接字处理代码(与设备通信),但是您可以创建自己的消息类型,而不必遵循WCF使用的(相当SOAP友好的)消息协议。

如果您要一路走下去并实施自定义WCF传输,那么您将拥有一个优势,如果您要将其公开给许多已经习惯于WCF的不同人员,那么该协议会“协商”该协议实现服务的方式 - 您必须承担编写WCF传输的初始(非常高)成本,但稍后人们可以使用WCF提供的良好合同模型为该设备编写服务。

答案 1 :(得分:2)

WCF具有相当的学习曲线,如果您需要定制大量非常低级别的东西,曲线将会更陡峭。

此外,创建WCF的原因是允许开发人员不必担心较低级别的实现细节。看起来你想要两全其美,这意味着你可能会花费大部分时间来对抗WCF,让它按照你想要的方式工作。

免责声明:虽然我对WCF有基本的了解,但我不是专家,我可能错了。