将Silverlight项目重写为javascript,涉及wcf

将Silverlight项目重写为javascript,涉及wcf,javascript,c#,wcf,silverlight,Javascript,C#,Wcf,Silverlight,有一个c#项目,托管多个wcf服务,包括basichttpbinding和nettcpbinding。 还有一个silverlight项目,使用这些服务。对于nettcpbinding部分,它与服务器建立连接。当服务器从别处获得新数据时,它会通过回调通道将数据发送到连接的客户端 关于silverlight,我什么都不知道,但它在客户端运行。我认为这一点很重要:因为sliverlight在客户端运行,并且是用c#编写的,所以很容易使用wcf服务,包括双工服务 我的任务是重写silverlight项

有一个c#项目,托管多个wcf服务,包括basichttpbinding和nettcpbinding。 还有一个silverlight项目,使用这些服务。对于nettcpbinding部分,它与服务器建立连接。当服务器从别处获得新数据时,它会通过回调通道将数据发送到连接的客户端

关于silverlight,我什么都不知道,但它在客户端运行。我认为这一点很重要:因为sliverlight在客户端运行,并且是用c#编写的,所以很容易使用wcf服务,包括双工服务

我的任务是重写silverlight项目,主要使用javascript。 对于非双工部分,我编写了几个ashx处理程序,并使用ajax调用它。(是这样吗?)

但对于双工部分,在阅读了一些帖子后,我发现轮询似乎是唯一的方法。当服务器接收到新数据时,它将其存储在某个地方,客户端每隔几秒钟调用一个处理程序,然后处理程序返回新数据。因此,服务器无法主动向客户端发送数据。 我这样做是正确的,还是其他方式?

是新的HTML5标准,支持从服务器到客户端的推送。(实际上,web套接字可能优于Silverlight双工类,Silverlight双工类不使用真正的幕后推送,而是使用老式的长轮询,定期从客户端发出“保持活动”信号。)


我建议看一看,这是一个ASP.Net组件,它包装了web套接字功能,并且“退回到其他与旧浏览器兼容的技术上”。

几年前,我也处于类似的境地:我有一个Silverlight客户端与一个双工WCF服务器对话,我需要将其移植到JavaScript/HTML5。问题是,“我们对后端做什么?”我选择了与@McGarnagle描述的完全相同的场景,即切换到后端,并使用signarjavascript客户端与该后端通信。我本可以花大量时间重新构建WCF后端以与SignalR共享逻辑,但由于我们实际上放弃了Silverlight客户端,因此将WCF服务的代码剪切并粘贴到新的SignalR集线器中才更有意义

我唯一不喜欢signar(当时)的地方是它只使用动态对象与客户机通信。我更喜欢(并且继续喜欢)静态编译时检查。我认为现在有很多方法可以通过signar和TypeScript实现这一点,但我最近还没有对它们进行研究

顺便说一句,我调查的主要替代方案是使用JavaScript与同一个WCF服务对话。虽然有一些方法可以让它发挥作用,但它们似乎不是很成熟,也不太可能在未来得到很好的支持。如果您试图在后端使用C#,在客户端使用JavaScript,并且需要双向通信,那么signar肯定是您想要使用的方法:在这种情况下,请远离WCF