我的 SignalR 聊天应用程序在本地计算机上运行得很好,但是当托管在服务器上时,很少有方法有时不响应。我搜索了很多次并找到了与此相关的解决方案。
连接超时
断开连接超时
保持事件
这是我在 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和alertOnlineOthers是客户端的方法,在侧边栏中附加在线用户列表。事情就在服务器上,当有人在 30 秒内上线时,将调用alertOnlineToSelf 和alertOnlineOthers 方法,但如果相同的人在 30 秒或更长时间后上线,则为该人调用其他方法,但仅为该人调用调用者方法尽管我传递了所有在线用户的列表,但并非所有在线用户都在前 30 秒内在线。
所以我在 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 中添加了此配置。但这并没有帮助。 如果有人对此有解决方案,请回复。 提前致谢。
最佳答案
找到了这个问题的解决方案!
实际上上面的代码运行得很好, 我刚刚更改了托管服务器。
两台服务器之间的差异仅在于 IIS 版本,我的新托管服务器具有IIS 8.0 Express,旧版本是IIS-7 strong>,假设它不支持最新版本的signal-R,我使用升级版本。
关于c# - 聊天应用程序在本地运行良好,但在服务器上无法正确响应 - signalr 2.2.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43177117/