2012-04-16 48 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处理程序完成。