ユーザーの接続IDを維持しようとしています。つまり、彼がページを更新しても同じ接続IDを取得します
これは私が今までできることです
ジャバスクリプトの部分
// Start the connection
$.connection.hub.start(function () { chat.join(projectId, userId, userName); }).done(function () {
alert("Connected!");
var myClientId = $.connection.hub.id;
setCookie("srConnectionid", myClientId, 1);
});
function setCookie(cName, value, exdays) {
try{
var exdate = new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value = escape(value) + ((exdays == null) ? "" : "; expires=" + exdate);
document.cookie = cName + "=" + c_value;
}
catch(err){
alert(err.Description);
}
}
そして、このように IConnectionIdFactory を継承するクラスを作成しました
public class MyConnectionFactory : IConnectionIdFactory
{
public string CreateConnectionId(IRequest request)
{
if (request.Cookies["srconnectionid"] != null)
{
return request.Cookies["srconnectionid"];
}
return Guid.NewGuid().ToString();
}
}
上記のクラスを Application_start() に以下のように登録しました
protected void Application_Start()
{
AspNetHost.DependencyResolver.Register(typeof(IConnectionIdFactory), () => new MyConnectionFactory());
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
私の問題は、CreateConnectionId リクエスト内で MyConnectionFactory クラスが呼び出されるたびに発生することです。Cookies["srconnectionid"] は毎回 null であるため、ユーザーには毎回新しい接続 ID が割り当てられます。接続 ID を維持するのに役立つリンクが 1 つしか見つかりませんでした。 //www.kevgriffin.com/maintaining-signalr-connectionids-across-page-instances
誰でも私の問題を解決する方法を提案できますか、または同じユーザーの接続 ID を再利用する他の方法はありますか?
Cookie の値はクライアント側で設定されます。私はこれを 2 日間試しています。とても役に立ちます。
前もって感謝します