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

Tom*_*m W 1 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或其他类似的东西.他们之间似乎没有任何转换.

Chr*_*son 5

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

默认情况下,WCF将通过NetNamedPipeBinding交换SOAP消息.

但是,消息交换是针对事务流,消息成帧和编码的一些Microsoft专有协议进行分层的,这意味着如果在Qt端直接从QLocalSocket中获取字节流,则需要做很多工作才能实现这些底层协议之前你将能够获得SOAP信息集本身.

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

您可能希望阅读我的博客以获取更多详细信息.