【发布时间】:2011-07-20 22:00:16
【问题描述】:
我需要编写一个可以与其他 .NET 程序通信的程序……但也需要一个通过 TCP 的旧版 VFP 程序。我需要选择一个 VFP 程序员可以使用的相当简单的 TCP 消息格式。它可以像一系列由...分隔的小 XML blob 一样简单,我不知道,一个空字符?随便。
我需要在 TcpListener/TcpClient 和 WCF 之间进行选择。我开始研究 WCF,但它的架构似乎不透明,并且内置的 Visual Studio 模板严重偏向于制作类似于 RPC 机制的“Web 服务”,但需要一个特殊的“主机”或应用程序外部的 Web 服务器.微软的6-stage tutorial 让 WCF 听起来很麻烦(涉及代码生成器、命令行和 XML 废话,只是为了远程减去或乘以两个数字)。
我想要一个独立的应用程序(没有“主机”),我想要控制有线协议,并且我想了解它是如何工作的。WCF 似乎不能促进这些事情,所以我放弃了 TcpListener/TcpClient 的因素。
但是,该程序将充当单个 (VFP) 服务器和许多 (.NET) 客户端之间的中介,并且将在两个方向和不同连接之间进行通信。使用TcpListener 和TcpClient,处理连接和线程的工作变得有点混乱,我没有使用IAsyncResult 的经验,而且我不仅对自己的代码质量没有信心。
所以我想再次征求意见:我还应该考虑 WCF 吗?如果是,您能否指出以下问题的答案?
- Web 上哪里可以很好地解释 WCF 的体系结构?或者我需要一本书吗?
- 如何在 WCF 中进行双向通信,其中(单个 TCP 连接的)任何一方都可以随时发送消息?
- 如何通过所有的 Web 服务和 RPC mumbo-jumbo,并控制有线协议?
- 在 WCF 中,如何干净地关闭应用程序,同时关闭所有连接,而无需使用 Thread.Abort() 命令?
如果不是,我该如何设置我的代码(使用 TcpListener/TcpClient/NetworkStream),以便我可以从 NetworkStream 读取消息,但也可以接受来自其他连接的请求,随时干净地关闭,并避免浪费 CPU 时间轮询处于非活动状态的队列和 NetworkStream?
【问题讨论】:
-
VFP可以调用COM对象吗?如果是这样,则创建一个 .NET 类库,将其公开给 COM,并使用它与 WCF 对话。
-
@John Saunders:是的,我相信它可以通过
CreateObject函数调用。然而,在这种情况下,最好使用CreateObject以便通过 COM+ 集成访问代理(参见此处的清单 10-11:msdn.microsoft.com/en-us/library/bb735856.aspx) -
@John,VFP 可以使用 COM,但与我的判断相反,我的主管希望中介能够在不同的机器上运行。这意味着 DCOM,我不知道如何使用。由于
VFP <-> intermediary之间的消息与intermediary <-> clients之间的消息相似,我认为最好同时使用 TCP。
标签: c# .net wcf architecture visual-foxpro