2011-11-20 81 views
2

我仍然感到困惑時,它是適合使用的消息類型在WCF像下面使用WCF消息

[ServiceContract] 
public interface IMyService 
{ 
    [OperationContract] 
    Message GetData(); 

    [OperationContract] 
    void PutData(Message m); 
} 

爲什麼要使用它?

你可以用它來流式傳輸嗎?

感謝

回答

3

儘管Tim列出的原因是有效的,但我們直接在我們的服務中使用消息來創建一個超級路由服務。 我們有一個服務可以接受任何方法調用,客戶端由多個來源提供的wsdls生成。

此服務將接收消息,檢查其內容並相應地路由它。 所以在我看來,如果你想更接近線路,或者當你不知道傳入消息的類型時,可以直接在簽名中使用消息。

流是一個獨立的概念比消息簽名,流是由非常具體的綁定和安全機制下的wcf支持和方法簽名必須非常具體(即它應該返回/接受流)。同樣在流式傳輸中,實際的數據流在soap消息的範圍之外傳播。

+0

WCF4不會引入專門用於路由的路由服務嗎?或者是消息數據包只是做它的另一種方式 – TheWommies

+0

,但是對於其他的wcf服務,我們有非常自定義的路由行爲.... –

4

MSDN列出瞭如下原因直接使用信息類:

  1. 當你需要創建傳出的消息內容(例如的另一種方式,直接從文件創建一個消息在磁盤上)而不是序列化.NET Framework對象。

  2. 當您需要使用傳入消息內容(例如,當您想將XSLT轉換應用於原始XML內容)而不是反序列化到.NET Framework對象的替代方式時。

  3. 無論消息內容如何(例如,在構建路由器,負載均衡器或發佈 - 訂閱系統時路由或轉發消息),您都需要以常規方式處理消息。

有關更多詳細信息,請參閱Using the Message Class

編輯以解決問題流

我沒有找到我通過谷歌快速掃描一個明確的答案,但上面的文章指出:「客戶端和服務之間的所有通信最終導致信息情況下被髮送並收到「 - 所以我會認爲它可以直接用於流媒體。

+0

老實說,我有問題,理解這些答案。像點1一樣,爲什麼你需要一個消息結構來從文件發送消息。你可以加載文件,只需在一個簡單的.net類中設置屬性?對不起,如果我很慢 – TheWommies

+0

如果第3點可以澄清,那很好。不確定使用消息結構可以幫助您平衡負載嗎? – TheWommies

+1

點2的另一個很好的例子是一個POX(Plain Old Xml)服務,在這個服務中你不知道內容是什麼,直到它到達。 – IainJMitchell