ハブに接続しているすべてのクライアントにメッセージをブロードキャストしようとしていますが、WiFi 経由で接続されているモバイル ブラウザーを除くすべてのデスクトップ ブラウザー (IE 9、Chrome 20.x) がメッセージを受信します。IIS7 にアプリケーションをデプロイし、LAN 内でアプリケーションにアクセスしました。
したがって、私が持っているサーバーコードは次のとおりです-
[HubName("notifications")]
public class Notifications : Hub
{
try
{
using (var context = new xxxEntities())
{
// EF code that post the record to the database
Clients.taskAdded(message);
return true;
}
}
catch (Exception ex)
{
Caller.reportError("Unable to create notification message. Make sure title length is between 10 and 140");
return false;
}
クライアント側コード -
//Handlers for our Hub callbacks
//Invoked from our TaskHub.cs
this.hub.taskAdded = function (t) {
messages.push(new notificationViewModel(t.Id, t.Message, t.User, t.Notified, self));
//if (guid != test.guid) //notify all clients except the caller
};
これはすべてデスクトップ ブラウザーでうまく機能します。私は、ノックアウト js を使用して、HTML 要素 (リストなど) にバインドされたデータ モデルを更新しました。タスクがデータベースに追加されると、モバイル クライアントを除くすべてのデスクトップ ブラウザ クライアントが更新されました。
モバイル ブラウザが通知を受け取らない理由がわかりますか?
更新 - IE 9 でも同じ問題があり、IE の開発者ツールからスタックをコピーしました
ロング ポーリング トランスポートを使用します。IE は Web ソケットをサポートしていないため、signalR トランスポートを「ロング ポーリング」に切り替えます。
2秒ごとに試行するURLは次のとおりです
URL - /m.Notifications/signalr/reconnect?transport=longPolling&connectionId=311eed98-4e1d-4a0c-a012-2a41b20eded0&connectionData=%5B%7B%22name%22%3A%22notifications%22%7D%5D&messageId=18&tid=7
メソッド - GET 結果 - 500 (HTTP 応答コード) イニシエーター - JS ライブラリ XMLHttpRequest
オブジェクト参照がオブジェクト インスタンスに設定されていません。
スタックトレース:
[NullReferenceException: Object reference not set to an instance of an object.]
System.Web.HttpContext.GetWebSocketInitStatus() +251
System.Web.HttpContextWrapper.get_IsWebSocketRequest() +46
SignalR.Hosting.AspNet.AspNetResponse.get_IsClientConnected() +48
SignalR.Transports.TransportHeartBeat.AddConnection(ITrackingConnection connection) +280
SignalR.Transports.LongPollingTransport.ProcessReceiveRequest(ITransportConnection connection, Action postReceive) +38
SignalR.TaskAsyncHelper.Interleave(Func`3 before, Func`1 after, T arg, TaskCompletionSource`1 tcs) +181
SignalR.Transports.LongPollingTransport.ProcessRequest(ITransportConnection connection) +295
SignalR.PersistentConnection.ProcessRequestAsync(HostContext context) +892
SignalR.Hosting.AspNet.AspNetHandler.ProcessRequestAsync(HttpContextBase context) +866
System.Web.TaskAsyncHelper.BeginTask(Func`1 taskFunc, AsyncCallback callback, Object state) +50 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +12519412
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +288