我的SignalR聊天应用程序在本地计算机上工作得很好,但是当在服务器上托管时,很少有方法有时没有响应。我搜索了很多次,找到了与之相关的解决方案。
ConnectionTimeout
DisconnectTimeout
的KeepAlive
这是我在Hub
中的代码public class ChatHub : Hub
{
static List<User> connectedusers = new List<User>();
string time = DateTime.Now.ToShortTimeString();
public void Connect(string Name)
{
var conId = Context.ConnectionId;
if (Name != null)
{
connectedusers.Add(new User { ConId = conId, Name = Name });
}
if (connectedusers.Count > 1)
{
List<User> onlineUserlst = new List<User>();
onlineUserlst = (from a in connectedusers
where a.ConId != conId
select a).ToList();
Clients.Caller.alertOnlineToSelf(onlineUserlst, time);
Clients.Others.alertOnlineOthers(Name, time,conId);
}
}
}
此处,Name是用户在上线时进入提示对话框并且alertOnlineToSelf&amp; alertOnlineOthers是客户端的方法,其中联机用户列表附加在侧栏中。当有人在30秒内上线时,事情就在服务器上,alertOnlineToSelf&amp; alertOnlineOthers方法被调用,但是如果在30秒或更长时间之后相同,则会为该人调用其他方法,但只有在过去30秒内上线的人才会调用调用方法,而不是所有在线的人,尽管我是m通过所有在线用户的列表。
所以我在global.asax文件中进行了此更改
protected void Application_Start()
{
GlobalHost.Configuration.ConnectionTimeout = TimeSpan.FromSeconds(800000);
GlobalHost.Configuration.DisconnectTimeout = TimeSpan.FromSeconds(600000);
GlobalHost.Configuration.KeepAlive = TimeSpan.FromSeconds(200000);
...
}
在启动文件中进行这些更改根本没有显示效果所以我在global.asax中添加了这些配置。但这没有帮助。 如果有任何人有解决方案,请回复。 提前谢谢。
答案 0 :(得分:2)
获得此问题的解决方案!
实际上上面的代码工作得很好, 我刚刚更改了托管服务器。
两台服务器之间的区别只是IIS版本,我的新托管服务器有 IIS 8.0 Express &amp;旧版本 IIS-7 ,假设不支持 signal-R 的最新版本,我使用的是升级版。