2012-03-12 63 views
2

我試圖調用一個控制檯應用程序與SignalR.Net客戶端一起工作,但當我嘗試調用Hub上的方法時出現錯誤。下面是我的控制檯應用程序代碼:SignalR .NET客戶端調用引發異常

static void Main(string[] args) 
{    
    var connection = new HubConnection("http://localhost/SignalRTest"); 
    var myHub = connection.CreateProxy("SignalRTest.Classes.service"); 

    myHub.On<string>("addMessage", text => 
    { 
     Console.WriteLine(text); 
    }); 

    connection.Start().ContinueWith(task => 
    { 
     if (task.IsFaulted) 
     { 
      Console.WriteLine("There was an error opening the connection: {0}", task.Exception.GetBaseException()); 
     } 
     else {       
      Console.WriteLine("Connected."); 
     } 
    }).Wait(); 


    myHub.Invoke("Send", "Message from console.").ContinueWith(task => { 
     if (task.IsFaulted) 
     {     
      Console.WriteLine("There was an error calling Send: {0}", task.Exception.GetBaseException()); 
     } 
     else 
     { 
      Console.WriteLine("Send complete."); 
     } 

    }); 


    Console.ReadLine(); 

} 

這裏是集線器從服務器:

[HubName("service")] 
public class ServiceHub : Hub 
{ 
    public void Send(string message) 
    { 
     // Call the addMessage method on all clients 
     Clients.addMessage(message); 
    } 
} 

我假設的控制檯應用程序連接正確,因爲它寫出了「連接」。但是當它嘗試調用服務器上的發送方法時,出現以下錯誤:

System.Net.WebException:遠程服務器返回錯誤:(500)內部服務器錯誤。 at SignalR.HttpHelper的System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult) 。 <> C_ DisplayClass2.b _0(IAsyncResult的AR) 在System.Threading.Tasks.TaskFactory 1.FromAsyncCoreLogic(IAsyncResult iar, Func 2 endMethod,TaskCompletionSource`1 TCS)

誰能告訴我什麼,我做錯了什麼?謝謝。

回答

4

此問題似乎是由使用無效的集線器名稱引起的(使用CreateProxy時)。奇怪的是,啓動方法不會失敗,但我只是測試了這一點,並得到了與使用不存在的集線器名稱相同的行爲。

+0

工作。謝謝!我認爲我可以用這個[HubName(「service」)]來更改集線器名稱。它在JavaScript客戶端上工作,但不在控制檯客戶端上。但是現在並不重要,因爲我不需要它。再次感謝你的幫助。我無法相信我那麼接近。 – jmac 2012-03-14 01:22:09

+0

@jmac,所以你改變了var myHub = connection.CreateProxy(「SignalRTest.Classes.service」); var myHub = connection.CreateProxy(「service」);或者你刪除了屬性[HubName(「service」)]? – 2014-02-26 06:10:42

+0

@Prera​​kK記住,這是近兩年前現在。問題可能是'var myHub = connection.CreateProxy(「service」)'。這是錯誤的,因爲hubname屬性隻影響生成的javascript而不是實際的端點。正確的行是'var myHub = connection.CreateProxy(「ServiceHub」)' – 2014-02-27 04:17:22

0

您還沒有添加SignalR.hosting.AspNet DLL,因此創建了此錯誤。所以,首先在服務器上包含dll與SignalR.Hosting.AspNet