c# - 我应该使用 WCF 来实现给定的二进制网络协议(protocol)吗?

标签 c# .net wcf network-programming

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

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

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

最佳答案

使用 WCF 多年(并且喜欢它),我认为它不是满足您需求的最佳选择。正如 Phil 所提到的,它的最佳位置是围绕 Web 服务,而不是低级通信。要在 WCF 中实现它,您需要编写自定义传输,与几乎所有低级( channel 编程)一样,它涉及大量代码。此传输需要使用套接字来理解设备协议(protocol),并且您需要以某种方式将消息从协议(protocol)转换为 WCF 消息。

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

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

关于c# - 我应该使用 WCF 来实现给定的二进制网络协议(protocol)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7099685/

相关文章:

wcf - 如何在运行时更改 basicHttpBinding sendTimeout?

c# - 从 WCF-RESTful 服务读取多部分表单数据和 json 输入

c# - 在 c# 中验证 android 在应用程序中的购买

c# - 我可以在 WPF 中捕获对可观察结构成员的更新吗?

c# - 我如何判断 int[] 是否尚未分配任何内容?

c# - 具有不同返回类型的方法重载

c# - WCF 数据契约和枚举共享

c# - 将 Rx 超时与 FromEventPattern Observer 结合使用

c# - 以编程方式关闭 USB 端口的电源

.net - 学习 Spring.NET 的资源