2016-11-07 4 views
0

다양한 리소스를 기반으로 signalr 코드가 작동해야하지만 서버에서 클라이언트로 알림을 보내도록 만들 수는 없습니다. 다음은 HTML/자바 스크립트 일부입니다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 버튼을 클릭하면 메시지가 container-hub div에 추가되지만, sendMessage 메서드를 호출하면 아무 것도 표시되지 않습니다.

편집

일부 추가 연구 결과; 나는 OnConnected 방법 내에서 sendMessage를 호출 할 때 그것은 작동 :

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

""이 맞습니까? 일반적으로 "신호기/허브"입니다. – ravi

+0

예, 확신합니다. 서버 통신에 대한 클라이언트가 잘 작동한다고 언급했습니다. – Morpheus

답변

0

을 드디어 해결책을 발견 한 문제를 조사하기 위해 몇 가지 괜찮은 시간을 보내고 후. 100 % 확실하지는 않지만 문제는 페이지에서 UpdatePanel을 사용하는 것과 같았습니다. signalR 자바 스크립트 코드를 Sys.Application.add_load으로 바꿔 jQuery의 $(function() { 대신 사용하고 작업을 시작했습니다.

내가 100 % 확신하지 못했던 이유는 ScriptManager이있는 UpdatePanel이 여러 번 제거되어 여러 번 질문을 게시하기 때문입니다.