2016-12-22 3 views
0

어떤 종류의 영혼이라도 실시간으로 데이터를 폴링하기 위해 기존의 mvc 프로젝트에서 signalR을 사용하는 방법을 안내해 드릴 수 있습니다. 예 번호 :신호가 필요합니다. asp.net mvc에 대한 폴링이 필요합니다.

[제어부]

private ApplicationDbContext db = new ApplicationDbContext(); 
public PartialViewResult Chat(string people) // <---need to send real time data to partial 
    { 
      var model = new MessageVM() 
      {  
       sender = User.Identity.Name;,    
       messageList = db.messages.Where(x => x.receiver == people).ToList().Take(30) 
      }; 
      return PartialView("_chat", model); 
    } 

[도면]

@Ajax.ActionLink(item.name, "Chat", new { people = item.name }, new AjaxOptions() 
{ HttpMethod = "GET", UpdateTargetId = "divChat", InsertionMode = InsertionMode.Replace }) 

<div id="divChat"></div> // <---this area need real-time messages data from controller. 

답변

0

먼저 클라이언트 측 JS에서 signalr 연결을 생성한다. 뭔가 같은 :

function signalrconnection() { 

    $.connection.hub.url = "http://localhost:54321/signalr"; 
    chat = $.connection.myHub; 


    if (chat != undefined) { 
     $.connection.hub.start() 
     .done(function() { 
      chat.server.send("client", "Status\tasking for status"); 
      chat = $.connection.myHub; 
     }) 
     .fail(function() { NoLTConnectionAlert(); }); 
    } 
    else { 
      ///do something. 
     } 
    } 

    return chat; 
} 

이 그런 다음 JS 뭔가 같은에서 $(document).ready(function())에 signalr 호출을 추가 : 컨트롤러에서

$(document).ready(function() { 

    chat = signalrconnection(); 
    intervalstatus = setInterval(checkstatus, 1000); 

    // Create a function that the hub can call to broadcast messages. 
    chat.client.addMessage = function (name, message) {} 
} 

이 같은 내부 허브 및 방법에 대한 클래스가 있어야합니다

 public class MyHub : Hub 
    { 
     public void Send(string name, string message) 
     { 
      Clients.Caller.addMessage("parameter", reply); 
     } 
    } 

다시 업데이트하려면 Clients.Caller.addMessage을 js에 처리해야합니다. <div id="divChat"></div>

+0

는 매력으로 작동합니다. –

관련 문제