0

私は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"]%>);
           });
       }
});

クライアント側のスクリプトで、サーバー側のメソッドが呼び出される前に起動するアラートを出力し、このアラートがセッションユーザー値を返すため、この呼び出しが発生する前にセッションが有効であることがわかります。このヌルエラーが発生している理由はありますか?

4

2 に答える 2

1

SignalRは、セッションへの読み取り専用アクセス権を持ちます。そのようにしたくない場合は、クライアントのセッションにアクセスし、クエリ文字列を使用して情報をハブに渡すことができます。

クライアント側コード:

var uid = <%=Session["User"]%>;
$.connection.hub.qs = "uid=" + window.encodeURIComponent(uid)

サーバー側コード:

var userId = Context.QueryString["uid"];
于 2013-02-13T17:47:06.603 に答える
0

コードにブレークポイントを設定して、例外の発生元を確認できます(system.diagnostics.debugger.launch())。コードを見るだけで、目立つのはvar query = qFactory.GetQuery( "P_UPDATE_CURRENT_USER");だけです。クエリをnullにすることはできますか?

于 2013-01-25T20:49:21.517 に答える