在使用asp .net MVC编写的基于javascript的数据驱动应用程序中使用Signalr作为通信方法有哪些优点和缺点?
谢谢,
答案 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本身处理的事情会很好。 (当然,如果我是一个更好的人,我自己编写代码并将其作为拉取请求提交 - 只是尚未解决它。)