2014-07-25 2 views
10

간단한 HTML 페이지와 SignalR을 통해 통신 할 수있는 JavaScript가있는 ASP.NET 웹 응용 프로그램이 있습니다. 그건 잘 작동합니다.SignalR 2.1.0 : 연결이 설정되지 않았습니다.

 var connection = new HubConnection("http://localhost:32986/"); 
     var hub = connection.CreateHubProxy("MessageHub"); 
     connection.Start(); 
     hub.Invoke("SendMessage", "", ""); 

마지막 줄은 InvalidOperationException: The connection has not been established. 발생하지만 연결할 수 있어요 : 지금 나는 (동일한 솔루션에) 및 .NET Signalr 클라이언트 API를 사용하여 다른 프로젝트에서 허브의 메소드를 호출하려고 해요 내 JavaScript 코드에서 허브에 연결합니다.

어떻게 C# 코드를 사용하여 허브에 연결할 수 있습니까? 이 게시물을 작성 후 순간, 나는 .Wait()을 추가하려고

UPDATE와 일했다! 그래서이 수행합니다

 var connection = new HubConnection("http://localhost:32986/"); 
     var hub = connection.CreateHubProxy("MessageHub"); 
     connection.Start().Wait(); 
     hub.Invoke("SendMessage", "", ""); 

답변

12

HubConnection.Start 당신이 메소드를 호출하기 전에 완료해야하는 Task을 반환합니다.

public async Task StartConnection() 
{ 
    var connection = new HubConnection("http://localhost:32986/"); 
    var hub = connection.CreateHubProxy("MessageHub"); 
    await connection.Start(); 
    await hub.Invoke("SendMessage", "", ""); 
    // ... 
} 

// or 

public void StartConnection() 
{ 
    var connection = new HubConnection("http://localhost:32986/"); 
    var hub = connection.CreateHubProxy("MessageHub"); 
    connection.Start().Wait(); 
    hub.Invoke("SendMessage", "", "").Wait(); 
    // ... 
} 

은 "어떻게 연결을 설정 :이 작업을 수행하는

두 가지 방법은 비동기 방식에있는 경우 기다린다을 사용하거나이 아닌 비동기 방식의 경우 Task.Wait()을 사용할 수 있습니다 ASP.NET SignalR Hubs API Guide for the .NET client.의 "섹션은 더욱 자세히 설명합니다.

+1

세번째 옵션 :'ContinueWith'. 이것은 본질적으로 클라이언트 측에서 수행되는 방식이므로 JS와 C# 사용 사이에 약간의 일관성이 추가됩니다. – Corey

관련 문제