将SignalR与自主WCF一起使用并通过HTML客户端

时间:2017-02-16 18:40:13

标签: javascript web-services wcf silverlight signalr

目前,我正在努力迁移一个实现WCF服务并通过Silverlight客户端使用它的旧项目。此WCF服务使用Silverlight自动理解并知道如何处理它的双工轮询方法。因此,新的HTML客户端将取代Silverlight客户端。

在做了一些研究之后,我找到了一些有用的解决方案:使用长轮询web api或类似的,通过.NET WebSocket实现在WCF中添加对WebSocket的支持,并使用SignalR。到目前为止,我更倾向于SignalR,因为我希望尽可能减少对WCF的更改。

因此,如果我的理解是正确的,当使用SignalR时,它将创建一个Hub代理,在服务器中的服务和客户端之间进行通信。此外,它将负责通信的传输,默认情况下它可以使用WebSocket,如果浏览器不支持WebSocket,则可以回退到其他协议,并且可以在服务中不执行协议的情况下执行此操作。

我的问题是,如果我想将SignalR与我当前的WCF服务一起使用,那么使它运行的步骤是什么? WCF服务是在服务器上作为Windows服务运行的自主机。在WCF服务中,我有不同的子服务端点以及Silverlight客户端的当前端点。到目前为止,我能够使用WCF服务项目添加自主机SignalR并且它正在运行,但我不确定下一步是什么。我是否必须为SignalR集线器添加单独的端点?

另一个问题是,我是否需要对双工服务进行一些修改才能使其与SignalR一起使用?此外,客户端项目是否可以与WCF服务项目中的SignalR分开?最后,比较在WCF服务中添加对WebSocket的支持与仅实现SignalR之间的比较,哪一个在长期内具有更好的优势。

感谢。

1 个答案:

答案 0 :(得分:1)

.Net 4.5在WCF中引入了NetHttpbinding,它自动使用websockets进行双工消息模式,http用于请求回复消息模式。

更多关于Nethttpbinding的信息 - https://msdn.microsoft.com/en-us/library/hh674273(v=vs.110).aspx