2017-02-22 9 views
0
に基づいて、signalRを使用してWebソケット機能を追加しようとしています:

私は2つの異なるプロジェクトがある - 1:は、純粋なサーバーでのWeb APIが含まれています 私は要求を取得し、ハブに呼び出すためのWebメソッドを持っています。

[HttpGet] 
    [Route("api/GetData")] 
    public IHttpActionResult GetCorpDataApi() 
    { 
     return Ok(getResponse()); 
     **startWebSocket();** 
    } 

スタートウェブソケット方法

私のハブ内のメソッドへの呼び出し
private void startWebSocket() 
    { 
     MonitorHub hub = new MonitorHub(); 
     Timer myTimer = new Timer(); 
     myTimer.Elapsed += new ElapsedEventHandler(hub.DisplayTimeEvent); 
     myTimer.Interval = 3000; 
     myTimer.Start(); 
    } 

::への呼び出し

public class MonitorHub : Hub 
{ 

    public void DisplayTimeEvent(object source, ElapsedEventArgs e) 
    { 
     var response = MonitorUtils.GetCorpData(); 
     Clients.All.broadcastMessage(response); 
    } 

} 

(すべてが同じプロジェクトにあり、エラーなしでコンパイルされています)。私はindex.htmlの中に含まれていることに言及したい

function initWebSocket() { 
      self.chatHub = null; // holds the reference to hub 
      self.chatHub = $.connection.MonitorHub; // **I dont have MonitorHub** 
      $.connection.hub.start(); 
      self.chatHub.client.broadcastMessage = function (response) { 
       //bla bla 
      };    
     } 

私のクライアントコードは(もVS下)クライアントの角度のプロジェクトに位置しており、 は、私は、コントローラ内に必要な機能を追加しましたファイル:

<script src="scripts/Vendor/jquery/jquery-2.2.1.js"></script>                
<script src="scripts/Vendor/jquery/jquery.signalR-2.2.1.js"></script> 
<script src="scripts/signalr/hubs"></script> 
<script src="assets/global/plugins/angularjs/angular.min.js" type="text/javascript"></script> 

$ .connection.MonitorHubは取得されません - 未定義です。

私は本当にそれがサーバー側 がクライアント側とは異なるプロジェクトにあるという事実と関係があると考えています。チャットの例のような簡単な例を実行すると、すべて同じプロジェクト内で動作します。

コンソールに次のエラーが表示されます。 エラー:SignalR:ハブの読み込み中にエラーが発生しました。ハブの参照が正しいことを確認してください(例: 。

答えて

0

私は100%確信していませんが、JQueryバージョンミスマッチの場合があります。例:jqueryのバージョンを下げてみてください。 jquery-1.6.4.js

+0

ありがとうございますが、そうではありません。 コンソールでエラーが発生しました。 エラー:SignalR:ハブの読み込み中にエラーが発生しました。ハブの参照が正しいことを確認してください(例: 。 – moshi

+0

jsファイルでリソースパスの不一致が発生していないかどうかを確認してください。 – Tushar

+0

私は(f12で調べると)シグナル/ハブのフォルダは表示されません。 – moshi

0

プロジェクトにSignalRサーバーを追加していないようです。あなたはWebSocketを開始し、ハブのインスタンスを作成し、Web APIを投げているようです。これはSignalRの仕組みではありません。あなたのサーバーにSignalRサーバーパッケージをインストールする必要があります。そして、SignalRがあなたの呼び出しを処理し、ハブなどをインスタンス化します。セクションを設定するか、またはthis oneへのリンクを投稿したチュートリアルに従ってください。

+0

こんにちはPawel、ご返信ありがとうございます。 私は行った 私は、クライアントとサーバーが同じプロジェクトにある作業用eaxmpleを持っています。 ここでは違いがあります 他のアイデア? ありがとう! – moshi

+0

javascriptがSignalRを実行しているサーバーとは別のサーバーから来た場合は、CORSを有効にする必要があります。[H ere](https://docs.microsoft.com/en-us/aspnet/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-client)は、同様のことを行うチュートリアルです - signalRサーバーは自己ホストされていますが、javascriptファイルを含むHTMLは別のサーバーから提供されます。 – Pawel

関連する問題