启动时的ASP.NET SignalR C#客户端应用程序异常

时间:2017-04-27 04:28:27

标签: c# asp.net signalr signalr-hub

我有一个ASP.NET应用程序。我通过点击调试来运行它。它运行在localhost:2842。

我在类中定义了一个SignalR Hub,服务器上没有方法。

我有一个WPF Windows C#应用程序。我添加了SignalR NuGet包。我使用以下代码来实例化客户端代理:

        var hubConnection = new HubConnection("http://localhost:2842");

        IHubProxy myHubProxy = hubConnection.CreateHubProxy("MyHub");
        myHubProxy.On<string>("SendMeData", dataString => {

            Console.WriteLine("String value {0}", dataString);
        });

        hubConnection.Start().Wait();

这是我在服务器上定义的集线器类:

public class MyHub : Hub
{
    public static void SendMeData(string dataString)
    {
        var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
        if (context != null)
            context.Clients.All.SendMeData(dataString);
    }
}

我在Startup.cs中有这段代码:

public partial class Startup
{
    public void Configuration(IAppBuilder app)
    {
        ConfigureAuth(app);

        app.MapSignalR(new HubConfiguration
        {
            EnableDetailedErrors = true
        });
    }
}

我遇到的问题是,当C#客户端调用hubConnection.Start()时,Wait();我得到了一个非常无益的例外。这是一个例外:

StatusCode: 500, ReasonPhrase: 'Internal Server Error', Version: 1.1, Content:
System.Net.Http.StreamContent, Headers:  Transfer-Encoding: chunked
X-SourceFiles: =?UTF-8?B?QzpcTXlEZXZcUmVhbHRpbWVNRFxSZWFsdGltZU1EUHJvdG9cUmVhbHRpbWVNRFByb3RvXHNpZ25hbHJcbmVnb3RpYXRl?=
Cache-Control: private  Date: Thu, 27 Apr 2017 04:23:18 GMT  Server: Microsoft-IIS/10.0
X-AspNet-Version: 4.0.30319  X-Powered-By: ASP.NET  Content-Type: text/html; charset=utf-8

我在服务器代码中设置了断点,它永远不会击中它们中的任何一个。

我如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

在你的MyHub课程中,你有以下几行:

var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
        if (context != null)

摆脱这个。相反,你的MyHub类应该是:

public class MyHub : Hub
{
    public static void SendMeData(string dataString)
    {
       Clients.All.SendMeData(dataString);
    }
}

GetHubContext用于从同一AppDomain中的另一个类获取对Hub的引用。例如,如果您在Controller类中并且需要在同一AppDomain中的Hub上调用方法,则可以通过GetHubContext获取对Hub的引用。

同样在您的客户端代码中,请删除.Wait()。代码应该是

await hubConnection.Start();

Reference

答案 1 :(得分:0)

整个问题最终导致我在服务器中更改了我的Hub类的名称,而没有更改CreateHubProxy中使用的名称。它现在正在运作。

答案 2 :(得分:0)

此症状可能有两个原因:

  1. 找不到集线器名称,或拼写错误。
  2. 中心类不是公共的。

无论如何,SignalR库太糟糕了,无法指出真正的原因,只有500个错误代码!