命名管道从VB6到WCF

时间:2010-09-21 15:12:14

标签: wcf vb6 named-pipes

我是否可以让VB6应用程序调用与使用WCF端点以C#编写的服务的命名管道连接?

VB6项目,它使用命名管道与用C ++编写的服务进行通信。我想将C ++服务转换为C#(最好是.NET 4.0)。

VB6项目使用对CallNamedPipes的Win32调用向服务器发送消息。消息的有效负载是一个由以下结构组成的字符串。

 [command][data length][data if approprate to the message]

我目前无法转换应用程序的VB6端,但我想知道是否可以依赖CallNamedPipe函数向新的WCF服务发送消息以及它们是否能够很好地协同工作。我会看到WCF服务的合同方基本上是一个接受我将解析的字符串的方法。

此外,由于CallNamedPipes可以在outputBuffer参数中接收返回数据,WCF是否能够容纳这个?合同会是这样的......

string DoSomething(string command)

感谢您的帮助!

布赖恩

3 个答案:

答案 0 :(得分:1)

WCF非常好,但在通信通道的两端使用WCF时真的很棒。尝试将遗留代码连接到WCF服务充其量是棘手的。

使您的C#服务直接使用NamedPipeServerStream可能会更容易。这将使您完全控制如何处理连接和传输。话虽如此,没有什么可以阻止您同时执行这两个(实现自定义NamedPipeServerStream通道,以及在同一程序中公开一个或多个WCF端点)。如果你想升级客户端,这将提供一种前进的方法。

答案 1 :(得分:0)

布赖恩,

您是否可以使用PInvoke

直接从C#代码调用名为Pipes应用程序的C ++

Pinvoke.net

然后围绕WCF服务包装pinvoke服务以便于互操作。

此致

伊恩

答案 2 :(得分:0)

为什么不编写包含WCF客户端代理的ComVisible类,VB6代码可以像任何其他COM库组件一样调用它。