在WCF中通过命名管道传输SOAP消息

时间:2011-04-14 16:47:44

标签: wcf qt soap ipc

我担心我可能会对这个问题表达我的无知,但这里有......

我想使用WCF实现.NET应用程序和用Qt编写的第三方应用程序之间的进程间通信。 Qt应用程序有一个插件架构,如果我选择,可以用来引导一些.NET类来在两端干净地处理WCF,但我宁愿保持代码库原生,因此我正在考虑如何制作确保无论我使用WCF向线发送什么,我都可以使用Qt中可用的类在另一端重新组装。

Qt有一个SOAP消息类,所以我认为最好的解决方案 - 与我们已经一起攻击的解决方案最接近的解决方案 - 是发送SOAP消息并从QLocalSocket中获取它们。问题是,是否有可能强制WCF通过NetNamedPipeBinding将消息编码为SOAP,如果是这样,这样做是否明智?

我现在感到相当谨慎,因为我对所涉及的技术有不稳定的理解,所以我的问题可能不完全合理。如果是这种情况,请花时间解释原因,而不是仅仅说'不'。

编辑#1:我认为有必要进行更新,因为我已经调查了一些并且应该报告我的调查结果。

首先,我发现Qt是猪。事实证明,我提到的QtSoapMessage类在当前版本中不存在,并且仅作为您必须自己编译的售后市场源包提供。我用了几个小时的谷歌搜索,找出了为什么这不起作用。 Qt文档是完全可怕的,Qt Creator极端违反直觉,我几乎已经失去了耐心,所以还没有进一步追求这个想法。此外,我是如何将套接字数据传递到soap消息构造函数中并不明显,后者采用QDomDocument,而从套接字读取XML的API使用QXmlStreamReader或其他类似的东西。他们之间似乎没有任何转换。

1 个答案:

答案 0 :(得分:5)

你实际上对你认为的问题有不同的问题。

WCF默认会通过NetNamedPipeBinding交换SOAP消息。

然而,消息交换分层在一些Microsoft专有协议上,用于事务流,消息成帧和编码,这意味着如果在Qt端你直接从QLocalSocket中获取一个字节流你在你能够获得SOAP信息集之前,你需要做很多工作才能实现这些底层协议。

可以配置NetNamedPipe绑定以删除其中一些协议层,但不是所有协议层 - 例如,成帧协议将始终存在。

您可能希望阅读我的博客a lot more detail on this