0

这个问题是对先前提出的问题的跟进:link

我必须在 .NET/C# 中开发 Windows 服务。该服务必须由用 VB6 编写的应用程序使用。该服务实现 Quartz.NET 来处理计划任务,并且必须实现侦听器才能启动由 VB6 应用程序启动的功能。

VB6 团队的要求是能够使用 Winsock。因此我必须使用套接字和侦听器。问题是我没有这方面的经验,我更像是一个 WCF 人。

我现在正在查看 TcpListener 类,看看它是否符合要求。

我的第一个问题:如果我实现 TcpListener 类,VB6 团队是否能够使用该服务,同时牢记使用 VB6 的缺点(例如数据结构和二进制格式)?

我的第二个问题:假设 VB6 应用程序必须有 3 个函数可用,并且创建了 1 个侦听器。执行此操作的最佳实践是什么?

再次:非常感谢任何建议!

4

1 回答 1

1

将有效负载作为 XML、文本键/值对、JSON 或其他松散的序列化格式传递可以帮助您的协议面向未来。这允许您随意使用甚至添加新的可选方法参数到服务器端。

除了“方法”字段之外,您还可以有一个“协议版本”字段。当进行重大更改(新的必需参数、现有参数类型的更改等)时,您可以在过渡期间使用版本号来处理新旧客户端 - 这可能跨越数年。

至于在 TCP 流之上提供消息帧,您可以使用某种简单的 EOM 分隔符或包含二进制或文本长度前缀的消息头。

您也可以考虑命名管道。 从 VB6 程序调用TransactNamedPipe()相当容易。这会为您解决消息边界问题 - 假设您想要一个 RPC 样式的协议而不是异步发送/接收。

或者你可能会一直使用 MSMQ。专用机器队列不需要大量管理。但即使 VB6 和 .Net 都具有出色的 MSMQ 支持,大多数开发人员对此知之甚少。

于 2012-12-04T14:59:25.083 回答