我正在研究新的WCF 4.5 Websocket 服务。通过浏览器调用服务时遇到麻烦。
事实证明(经过大量谷歌搜索后),当您将 Web 浏览器作为 Web 套接字的客户端处理时,WCF 4.5 工作的唯一方法是,如果您使用 ' Action="*"定义您的OperationContract '标签[因为没有从浏览器调用“特定”函数的显式方法,您只需调用 'ws.send("asd")' 将消息发送到服务器,因此您需要为所有对服务的调用,同样只能有一个回调函数]
现在,如果你使用'Action="*"'你只能在定义你的合约时使用数据类型' Message '。
这很好,如果你想创建一个回显服务器,但是假设你想上传/下载数据,在默认(缓冲)模式下,数据传输速度不是他们应该的(20mb 文件需要 40-50 秒)。提高速度的唯一方法是将模式设置为“ Streamed ”(我尝试使用“ StreamResponse ”)。
但现在的问题是,由于我们在定义 Contracts 时只能使用 ' Message ' 作为数据类型,而 Message 使用 SOAP 类型定义,因此它使用了 ' Buffered ' 模式,即使它另有明确定义。[如果我在这里错了请纠正我]
所以,我的问题是,有什么方法可以在 WCF 4.5 Websockets 中实现“流式数据传输”。
而且,是的,我正在使用 byteStreamMessageEncoding(4.5 中提供的最新版本)。我在 web.config 中使用“自定义绑定”,因为“ netHttpBinding ”不适用于浏览器。