2012-04-16 93 views
2

我正在研究新的WCF 4.5 Websocket服務。 在通過瀏覽器撥打服務電話時遇到麻煩。事實證明(在使用了大量的搜索引擎之後),當您將網絡瀏覽器作爲您的網絡套接字的客戶端時,WCF 4.5的唯一作用方式是,如果您將OperationContract與'Action =「*」'tag [由於沒有明確的方法可以從瀏覽器中調用'特定'功能,您可以調用'ws.send(「asd」)'將消息發送到服務器,因此您需要爲所有服務調用定義一個處理函數,同樣只能有一個回調函數]如何使用WCF 4.5流式傳輸大量數據WebSockets

現在,如果您使用'Action =「*」'在定義合同時,只能使用數據類型'消息'。

這很好,如果你想創建一個回顯服務器,但可以說,你想上傳/下載數據,在默認(緩衝)模式下,數據傳輸速度不是他們應該的(20MB文件需要40-50秒)。提高速度的唯一方法是將模式設置爲'Streamed'(我嘗試使用'StreamResponse')。

但現在的問題是,因爲我們只能用「消息」爲數據類型在定義合同和消息使用SOAP類型定義,它使用「緩衝」模式下,即使其他條款明確規定。 [請糾正我,如果我在這裏錯]

所以,我的問題是,有沒有什麼辦法來實現'流數據傳輸'在WCF 4.5 Websockets。

而且,是的,我正在使用byteStreamMessageEncoding(4.5中提供的最新的一個)。 而我在web.config中使用'自定義綁定'爲'netHttpBinding'不適用於瀏覽器。

+0

WebSockets確實對消息進行分幀,它是基於消息的協議,但不是基於流的,即使它實際上基於TCP層(基於流)。 每個WebSocket消息都有自己的組幀,所以由於需要爲每個消息進行組幀,所以它不足以發送流數據。在接收到整個消息之前,瀏覽器中的onmessage事件不會被觸發。消息的大小在基於RFC 6455的幀中定義http://tools.ietf.org/html/rfc6455#page-27 – moka 2012-04-16 15:04:55

+0

嗨Maksims, 感謝您的答覆。 – Bhatti 2012-04-17 04:55:58

+0

另一個問題,我也研究了websockets的node.js實現,在WCF失敗後,最初我得到了相同的數字(25MB文件的數據傳輸時間約爲55秒),但是當我更改文件讀取方法時,數字即使「websocket」本身是一個基於消息的協議,但與普通的WCF服務相比,可以更快地傳輸大量數據。 – Bhatti 2012-04-17 04:59:21

回答

0

Ohk .... 由於WCF沒有工作..發現它可以使用ASP.Net 4.5處理程序完成。