我正在尝试使用 SignalR,我很确定我是对的。我正在做的是尝试使用 SignalR 客户端-> 服务器调用每隔一段时间触发服务器端方法。在服务器端方法中,我有一个条件,即 Session["User"] 不能为空,在此方法触发时它不可能为空,因为一旦加载该控件,它就会从控件中触发。但是,当在这种情况下调用该方法时,我得到一个空异常。
这是 C# 服务器端代码:
[HubName("timer")]
public class Timer : Hub
{
public void Time()
{
QueryFactory qFactory = new QueryFactory();
if (HttpContext.Current.Session["User"] != null)
{
var ui = (UserInfo)HttpContext.Current.Session["User"];
var userId = ui.UserID;
var userName = ui.Name;
var serverName = Dns.GetHostName();
if (!userName.Equals(""))
{
var query = qFactory.GetQuery("P_UPDATE_CURRENT_USER");
query["userid_in"] = Int32.Parse(userId);
query["last_changed_in"] = DateTime.Now;
query["server_name_in"] = serverName;
query.Execute();
}
}
}
}
这是调用服务器端的客户端代码:
$(function () {
var hub = $.connection.timer;
if (<%=Session["User"]%> !== null) {
alert(<%=Session["User"]%>);
$.connection.hub.start().done(function() {
setInterval(function() {
hub.server.time();
}, <%=ConfigurationManager.AppSettings["timerInterval"]%>);
});
}
});
请注意,在客户端脚本中,我在调用服务器端方法之前发出警报,并且此警报返回会话用户值,因此我知道在此调用发生之前会话是有效的。任何想法为什么会发生此空错误?