需求:一个Android/IOS框架内嵌asp.net页面的APP,需要做一个客户与客服之间的即时通信。
准备:一开始想用简单websocket轮询,N久之前做过但是不是很记得了,于是上网搜索,无意中发现signalr,决定尝试一下。
出了那么久的东西,相信signalr的通信原理,包括各种源码已经很多了,在此我就不再累赘了。在此主要记录从初建到成功整个过程遇到的问题。
1.0 在vs2012下载集成signalr1.1.4。
由于项目是.net framework 4.0,signalr2.0需要4.5及以上。所以我直接准备下载1.1.4。下载的时候就遇到了问题。首先,如果直接在 工具-》扩展与更新 直接找signalr是找不到的。需要在 工具-》扩展 下载 NuGet Package Manager 。
下载后,点击工具-》库程序包管理器-》管理解决方案的Nuget程序包。打开之后你可能会发现这种情况:
或者是404,那是因为nuget地址配错了。
解决方案:点击该弹出框左下角的设置-》包管理器-》程序包源,新添加一个地址:。
我此次采用的是命令下载:
选择对应的程序包源,选择默认要集成的程序,在控制台输入: Install-Package Microsoft.AspNet.SignalR 1.1.4。回车,安装完毕。(这里遇到的麻烦主要是程序包源地址错误。。。)
2.0 开始编码:只是为了理通,并没有过多的做页面。
2.1 首先遇到的第一个问题就是页面js,引入了 signalr.js和~/signalr/hubs,然而还是报错:$.connection.Send is undefined。调试发现connection就直接找不到了。后来发现,是signalr.js和~/signalr/hubs的位置放的不对,直接丢到_Layout.cshtml上,问题解决。
3.0 跨域:客户端的/signalr/hubs要改为对应服务器的文件。客户端创建连接的时候要指定对应服务器( $.connection.hub.url = "http://localhost:57214/signalr";)
总结:这个文章主要是针对自己遇到的一些问题的记录,并不是完整的 纪实。