2011-04-14 49 views
1

我怕我會用這個問題來顯示我的無知,但在這裏不用...發射SOAP消息命名管道在WCF

我想用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等。他們之間似乎沒有任何轉換。

回答

5

實際上,您認爲自己有一個不同的問題。

WCF默認通過NetNamedPipeBinding交換SOAP消息。

然而,消息交換層積在了交易流程,信息框架和編碼,這意味着如果在Qt的方面,你從QLocalSocket直接拿起一個字節流,你將有很多一些微軟私有協議的工作來實現這些底層協議,然後才能夠訪問SOAP Infoset本身。

可以配置NetNamedPipe綁定來刪除其中的一些協議層,但不是所有的協議層 - 例如,組幀協議總是在那裏。

您可能會喜歡閱讀我的博客a lot more detail on this

+0

哇,好的。這真的是一個很好的信息,因爲它表明SOAP交換比我預期的要複雜得多。我從Qt中想象的類是[QtSoapMessage](http://doc.trolltech.com/solutions/qtsoap/qtsoapmessage.html),這大概是因爲SOAP是一個標準,可以無縫地解釋?我必須做一些精心設計的實驗。非常感謝您的時間。 – 2011-04-14 17:11:17

+0

@Tom:不客氣,特別是如果你關心點擊小投票向上箭頭和/或接受:-) – 2011-04-14 17:27:07