2017-05-24 12 views
0

私はこのチュートリアルを使用しています:https://docs.microsoft.com/en-us/aspnet/signalr/overview/older-versions/tutorial-server-broadcast-with-aspnet-signalrシングルトンに格納されたConextからメッセージをブロードキャストします。私はいくつかの問題があります。SignalRバージョン1.2.2クライアント側メソッドが呼び出されておらず、コンソールログも作成されていません

まず、ハブを割り当ててクライアント側から接続することで問題はないようです。これは私のコードです:

$(function() { 
     var transactionHub = $.connection.TransactPtHub; // the generated client-side hub proxy 

     transactionHub.client.broadcastDmrUpdate = function (test) { 

      alert("Yo-Yo Ma!!" + test); 
     }; 
     console.log('test'); 
     $.connection.hub.logging = true; 
     $.connection.hub.start() 
      .done(function() { console.log('Now connected, connection ID=' + $.connection.hub.id); }) 
      .fail(function() { console.log('Could not Connect!'); }); 

     if ($.connection.hub.state === $.signalR.connectionState.disconnected) { 
      alert("connected"); 
     } 
     else { 
      alert("not connected"); 
     } 

    }); 

マイアラートは、「接続」ページのロード時に表示を行います。コードのこの部分の関数 "transactionHub.client.broadcastDmrUpdate = function(test){..."がサーバー側から呼び出されることはありません。

これは私のシングルトンです:

public class TransactPtSingleton 
{ 
    private readonly static Lazy<TransactPtSingleton> _instance = new Lazy<TransactPtSingleton>(() => new TransactPtSingleton(GlobalHost.ConnectionManager.GetHubContext<TransactPtHub>().Clients)); 

    private TransactPtSingleton(IHubConnectionContext clients) 
    { 
     Clients = clients; 
    } 

    private IHubConnectionContext Clients 
    { 
     get; 
     set; 
    } 

    public static TransactPtSingleton Instance 
    { 
     get 
     { 
      return _instance.Value; 
     } 
    } 

    public void BroadcastDmrUpdate(string dmr) 
    { 
     Clients.All.broadcastDmrUpdate(dmr); 
    } 
} 

、これが私のハブで、

[HubName("TransactPtHub")] 
public class TransactPtHub : Hub 
{ 
    public void UpdateDailyTransactionTable() 
    { 

    } 
} 

だから、私は戻って、放送上のクライアント関数の呼び出しを取得し、たとえていないI私のロギングをtrueに設定すると、ブラウザのコンソールにログが表示されません。どこからトラブルシューティングを始めますか?または私は何を間違っているのですか?ありがとうございました。

更新:私自身の診断を誤解しました。
if ($.connection.hub.state === $.signalR.connectionState.disconnected) {

トリガされているため、接続が何らかの理由で開始されていません。また、.doneと.failは決して入力されず、コンソールメッセージは一切得られません。

アップデート2:リターンdeferred.promise(上のように、とは何かを持っていると思わSignalR.jsを通じてコーミング

 // Check to see if start is being called prior to page load 
     // If waitForPageLoad is true we then want to re-direct function call to the window load event 
     if (!_pageLoaded && config.waitForPageLoad === true) { 
      connection._.deferredStartHandler = function() { 
       connection.start(options, callback); 
      }; 
      _pageWindow.bind("load", connection._.deferredStartHandler); 

      return deferred.promise(); 
     } 

は)それはSignalR.jsを出て戻ってきますUIの呼び出しスクリプトに渡します。

+0

JSはOKと思われます。ブレークポイントを設定し、C#メソッドの 'BroadcastDmrUpdate'メソッドが呼び出されていることを確認できますか? –

+0

@FrankModicaはい私はそれを言及するのを忘れました。私はブレークポイントを設定していましたが、そのメソッドを呼び出して呼び出し、Clients.All.broadcastDmrUpdate(dmr);しかし、私はクライアント側から何の反応も行動も得られません。 – eaglei22

+0

あなたは 'RouteTable.Routes.MapHubs();'を持っていますか? –

答えて

1

Question最初に私の「更新2」ために問題を抱えていたされている

if (!_pageLoaded && config.waitForPageLoad === true) {.... 

からjQueryのバージョン3

でSignalR 1.2.2を使用して、茎から:これは基本的にここに戻って私の元の質問への茎jQueryの> 3で.LOADの廃止私はあたりとして.onする.LOADを変更するために必要な:変更を破る

:.LOAD()、.unload()、および.ERRORは()

これらを削除しましたメソッドはイベント操作のためのショートカットですが、いくつかのAPIの制限があります。イベントの.load()メソッドがajax.load()メソッドと競合しました。 .error()メソッドは、DOMメソッドの定義方法のためwindow.onerrorで使用できませんでした。これらの名前でイベントをアタッチする必要がある場合は、.on()メソッドを使用します。 on( "load"、fn)に$( "img")。load(fn)を$( "img")に変更します。

から:JQuery Guide

しかし、私はアップgoofedとjquery.signalR-1.2内部。

_pageWindow.on("load", function() { _pageLoaded = true; }); 

に2js、代わりに変更する、

_pageWindow.load(function() { _pageLoaded = true; }); 

私はそれは物事が厳しい作らせませコンソールエラーが表示されませんされていた、

_pageWindow.on(function() { _pageLoaded = true; }); 

をしました。しかし、現在、SignalR接続がクライアント側から確立され、SignalRロギングも機能しています。

新しいバージョンのJQueryでSignalRの古いバージョンを使用している場合は、これが問題と解決策である可能性があります。

+1

ソリューションを投稿していただきありがとうございます! –

関連する問題