SignalR .NET客户端调用引发异常

问题描述:

我试图调用一个控制台应用程序与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)

谁能告诉我什么,我做错了什么?谢谢。

此问题似乎是由使用无效的集线器名称引起的(使用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

您还没有添加SignalR.hosting.AspNet DLL,因此创建了此错误。所以,首先在服务器上包含dll与SignalR.Hosting.AspNet