使用信号器有什么优缺点

use*_*953 4 asp.net-mvc signalr

在使用asp .net MVC编写的基于javascript的数据驱动应用程序中使用Signalr作为通信方法有哪些优点和缺点?

谢谢,

Ken*_*ith 7

当然,除非您需要它提供的功能,否则不应使用SignalR,也就是说,一个专注于JavaScript客户端的简单双工Web服务层.如果你是全新的,以ASP.NET,这可能不是你会需要马上 - 你已经得到了很多其他的东西去学习,然后才能避开编写复杂的,数据驱动的JavaScript应用程序.如果您只是在使用.NET客户端,请坚持使用WCF:它更灵活,其静态类型更适合C#和VB.NET.

这就是说,当你这样做需要一个基于.NET的Web服务后台的JavaScript应用程序,SignalR是一个相当不错的选择.配置肯定比Windows Communication Foundation更简单,对于JavaScript应用程序,它具有更好的功能集.它似乎是由微软赞助的(他们允许它坐在Microsoft.AspNet命名空间中),负责它的人似乎很聪明,也很努力(如果有时候有点麻烦).我曾在午夜报告过一个错误,在15分钟内得到了回复,并且在我早上起床时得到了修复.当然,它是开源的,并且他们愿意考虑拉取请求,所以如果你需要修复某些东西,那么你将获得比微软以前的闭源模型更好的运气.

唯一真正的缺点是,它是很新的 - 它最近达到1.0 RC1的状态 - 并因此缺少一些功能,这将是不错的,仍然有一些错误(这些最终会得到修复,当然).

这是一个如何仍然有点新的例子.你几乎肯定会遇到,如果你想序列化复杂的对象图的一个问题是,它使用Json.NET的专用格式的对象引用,所以你最终获得了很多的JSON的,看起来像这样:

{
  "$id": "57",
  "Name": "_default",
  "User": {
      "$id": "58",
      "UserTag": "ken",
      "Sessions": [{
          "$id": "59",
          "SessionId": "0ca7474e-273c-4eb2-a0c1-1eba2f1a711c",
          "User": {
              "$ref": "58"
          },
          "Room": {
              "$ref": "57"
          }
      }],
  },

  "Sessions": [{
      "$ref": "59"
  }]
}
Run Code Online (Sandbox Code Playgroud)

这是不是非常有帮助读取Session[]阵列,并且发现在它的唯一对象不是Session所有,但单一的任意对象$ref属性.为了解决这个问题,你需要包装的东西,如所有SignalR通话JsonNetDecycle.并不难,但在SignalR本身处理的事情会很好.(当然,如果我是一个更好的人,我会自己编写代码并将其作为拉取请求提交 - 但还没有解决它.)