最近在用C#开发聊天系统用到SignalR和Redis ,测试中发现的问题 ,记录下,如果能够帮到大家就更好。
工具:VS2015
技术:SignalR,Redis
解决方法:
1、手动升级Microsoft.AspNet.SignalR到最新版本,可解决这个问题
升级完之后别完啦前端修改jquery.signalR-2.4.1.js文件
2、直接在VS2015以上版本开发,不会出现问题,我测试了VS2017。
前端代码:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script src="Scripts/jquery-1.10.2.js"></script>
<script src="Scripts/jquery.signalR-2.1.2.js"></script>
<script src="/signalr/hubs" type="text/javascript"></script>
<meta charset="utf-8" />
</head>
<body>
<script type="text/javascript">
$.connection.hub.start().done(function () {
alert("测试连接成功");
}).fail(function () {
alert("测试连接失败");
});
</script>
</body>
</html>
OWIN Startup类:
public void Configuration(IAppBuilder app)
{
app.MapSignalR();
}
初步测试没有问题,正常连接成功,/signalr/hubs文件也存在。
接下来我们下一步需要测试Redis,引用Install-Package StackExchange.Redis 到SignalR 集线器类(CSHub)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR;
using System.Threading.Tasks;
using StackExchange.Redis;
namespace SignalR
{
public class CSHub : Hub
{
public async Task Login(string userName)
{
using (ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost:xxxx"))
{
IDatabase db = redis.GetDatabase();
await db.StringSetAsync("Csdb", "abc");
}
}
}
}
到这一步有错误,我们先按照提示的点一个引用看看,很成功错误已经消除。
但是这个时候发现了什么问题呢?重新打开CS.html页很惊讶发现,页面并没有弹框出现显示连接失败或成功,而查看文件,问题就很明显啦,signalr文件丢失导致js代码错误。
解决方法:
1、手动升级Microsoft.AspNet.SignalR到最新版本,可解决这个问题
升级完之后别完啦前端修改jquery.signalR-2.4.1.js文件
2、直接在VS2015以上版本开发,不会出现问题,我测试了VS2017。