2016-11-07 11 views
0

さまざまなリソースに基づいて、signalrコードが機能するはずですが、サーバからクライアントに通知を送信することはできません。ここでは、HTML/JavaScriptの一部です:SignalRサーバからクライアントへのメソッドが動作しない

<script src="/Scripts/jquery-1.6.4.min.js"></script> 
<script src="/Scripts/jquery.signalR-2.2.1.min.js"></script> 
<script src="/signalr/js"></script> 

<script type="text/javascript"> 
    $(function() { 
     var cHub = $.connection.cHub; 

     $.connection.hub.logging = true; 

     cHub.client.sendMessage = function (content) { 
      $("#container-hub").append($("<p />").html(content)); 
     }; 

     $.connection.hub.start().done(function() { 
      $('[id$=bGo]').click(
        function() { 
         cHub.server.send('Sync process started'); 
        }); 
     });   
    }); 
</script> 
<div id="container-hub" style="background: red; height: 100px; width: 100%;"></div> 

Hub.csクラス:

using Microsoft.AspNet.SignalR; 

namespace CMS.Objects 
{ 
    public class CHub : Hub 
    { 
     public void Send(string message) 
     { 
      // Call the broadcastMessage method to update clients. 
      Clients.All.sendMessage(message); 
     } 
    } 
} 

Startup.csクラス:

using Microsoft.Owin; 
using Owin; 

[assembly: OwinStartup(typeof(CMS.CStartup))] 

namespace CMS 
{ 
    public class CStartup 
    { 
     public void Configuration(IAppBuilder app) 
     { 
      app.MapSignalR();    
     } 
    } 
} 

そして、ここで私は方法sendMessageメソッドを呼び出していますどのようにされています。

private void ShowMessage(string message) 
{  
    var clients = GlobalHost.ConnectionManager.GetHubContext<CHub>().Clients; 
    clients.All.sendMessage(message); 
} 

bGoボタンをクリックすると divにメッセージが追加されますが、sendMessageメソッドを呼び出すと何も表示されません。

EDIT

いくつかの追加の調査結果。私はOnConnectedメソッド内からsendMessageを呼び出すときにそれが動作します:

public override Task OnConnected() 
{ 
    Clients.All.sendMessage("Connection Initialised"); 
    return base.OnConnected(); 
} 
+0

""が正しいですか?一般的には "signalr/hubs"です。 – ravi

+0

はい、私は確信しています。私が述べたように、クライアントとサーバー間の通信は正常に機能しています。 – Morpheus

答えて

0

を私が最終的に解決策を発見した問題を調査するためにいくつかのまともな時間を過ごした後。 100%は確かではありませんが、問題はページ上でUpdatePanelを使用していると思います。 signalRのjavascriptコードをSys.Application.add_loadに置き換えたのではなく、jQueryの$(function() {を使用していました。

私が100%確信していない理由は、ScriptManagerUpdatePanelが複数回削除され、質問を投稿する前に何も表示されないことです。

関連する問題