我有一个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
我在服务器代码中设置了断点,它永远不会击中它们中的任何一个。
我如何解决这个问题?
答案 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();
答案 1 :(得分:0)
整个问题最终导致我在服务器中更改了我的Hub类的名称,而没有更改CreateHubProxy中使用的名称。它现在正在运作。
答案 2 :(得分:0)
此症状可能有两个原因:
无论如何,SignalR库太糟糕了,无法指出真正的原因,只有500个错误代码!