使用信号器有什么优缺点

时间:2012-12-31 10:08:16

标签: asp.net-mvc signalr

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

谢谢,

1 个答案:

答案 0 :(得分:6)

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

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

它唯一真正的缺点是它很新 - 它最近达到了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"
  }]
}

阅读Session[]数组并发现它中唯一的对象根本不是Session,而是一个具有单个$ref的任意对象,这一点并不十分有用{1}}财产。要解决这个问题,您需要使用JsonNetDecycle之类的内容包装所有SignalR调用。并不难,但在SignalR本身处理的事情会很好。 (当然,如果我是一个更好的人,我自己编写代码并将其作为拉取请求提交 - 只是尚未解决它。)