此问题是对上一个问题的跟进:link
我必须在.NET / C#中开发Windows服务。该服务必须由VB6编写的应用程序使用。该服务实现Quartz.NET来处理计划任务,并且必须实现监听器才能启动VB6应用程序启动的函数。
VB6团队的要求是能够使用Winsock。因此我必须使用套接字和监听器。问题是我没有经验,我更像是一个WCF人。
我现在正在查看TcpListener类,看看它是否符合要求。
我的第一个问题:如果我实现TcpListener类,VB6团队是否能够使用该服务,请记住使用VB6的缺点(例如数据结构和二进制格式化)?
我的第二个问题:假设VB6应用程序必须有3个函数,并且创建了1个侦听器。执行此操作的最佳做法是什么?
再一次:非常感谢任何建议!
答案 0 :(得分:1)
将有效负载作为XML,文本键/值对,JSON或其他松散的序列化格式传递可以帮助您在未来证明您的协议。这允许您随意使用甚至向服务器端添加新的可选方法参数。
除了“方法”字段,您还可以拥有“协议版本”字段。当进行重大更改(新的必需args,现有arg类型的更改等)时,您可以使用版本号在过渡期间处理新旧客户端 - 可能跨越多年。
就在TCP流上提供消息帧而言,您可以使用某种简单的EOM分隔符或包含二进制或文本长度前缀的消息头。
您可能还会考虑命名管道。 TransactNamedPipe()很容易从VB6程序调用。这会为您处理消息边界问题 - 假设您需要RPC样式的协议而不是异步发送/接收。
或者您可以一直使用MSMQ。专用机器队列不需要大量管理。但即使VB6和.Net都具有出色的MSMQ支持,大多数开发人员对此都知之甚少。