私はSignalRを使おうとしていますが、これは私が正しいと確信しています。私がやっていることは、SignalRクライアント->サーバー呼び出しを使用して、サーバー側のメソッドを間隔を置いて起動しようとしています。サーバー側のメソッドでは、Session ["User"]がnullであってはならないという条件があります。これは、コントロールが読み込まれるとコントロールから起動されるため、このメソッドの起動時にnullになることはありません。ただし、この条件でメソッドが呼び出されると、null例外が発生します。
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"]%>);
});
}
});
クライアント側のスクリプトで、サーバー側のメソッドが呼び出される前に起動するアラートを出力し、このアラートがセッションユーザー値を返すため、この呼び出しが発生する前にセッションが有効であることがわかります。このヌルエラーが発生している理由はありますか?