SignalR:调用集线器方法时出现内部服务器错误

SignalR: Internal Server Error when calling hub method

本文关键字:内部 服务器 错误 调用 集线器 方法 SignalR      更新时间:2023-09-26

我已经用SignalR玩了几天了,我不得不说它是一个绝对非凡的库。我已经设法用它做了一些事情,并对它的简单性感到惊讶,但我最近遇到了一个小问题。

我无法在浏览器中从JavaScript调用Hub方法。请求返回一个500错误代码,当我查看错误页面源时,我看到的是:

[ArgumentNullException: Value cannot be null.
Parameter name: s]
System.IO.StringReader..ctor(String s) +10207225
Newtonsoft.Json.Linq.JObject.Parse(String json) +74
SignalR.Hubs.HubRequestParser.Parse(String data) +78
SignalR.Hubs.HubDispatcher.OnReceivedAsync(IRequest request, String connectionId,  String data) +266
SignalR.<>c__DisplayClass6.<ProcessRequestAsync>b__4(String data) +84
SignalR.Transports.ForeverTransport.ProcessSendRequest() +159
SignalR.Transports.ForeverTransport.ProcessRequestCore(ITransportConnection connection)  +149
SignalR.Transports.ForeverTransport.ProcessRequest(ITransportConnection connection) +42
SignalR.PersistentConnection.ProcessRequestAsync(HostContext context) +1087
SignalR.Hubs.HubDispatcher.ProcessRequestAsync(HostContext context) +251
SignalR.Hosting.AspNet.AspNetHandler.ProcessRequestAsync(HttpContextBase context) +656
SignalR.Hosting.AspNet.HttpTaskAsyncHandler.System.Web.IHttpAsyncHandler.BeginProcessReques t(HttpContext context, AsyncCallback cb, Object extraData) +143
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()  +9479007
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean&  completedSynchronously) +178

我的服务器端代码是:

public class SourceHub : Hub
{
    public void RegisterSource(string source)
    {
        Groups.Add(Context.ConnectionId, source);
    }
}

在客户端我有:

var SourceHub = $.connection.sourceHub;
$.connection.hub.start().done(function () {
    SourceHub.registerSource("test");
});

我已经挖了一段时间了,但我就是找不到问题的根源。。。有人能帮帮我吗?

前言:我是这个项目的edobry团队成员,我是后端人员,所以这次进军前端对我来说是新的,也是迷人的。

因此,在我完成项目的过程中,经过对代码的仔细分析,发现请求变量中的POST数据是空的。数据被正确地发送到$.ajax调用,但从未到达服务器。经过更多的狩猎,我发现了一些可疑的东西,我和edobry当时能够辨别出发生了什么。

我们在页面的其他部分使用Ajax,Ajax方法被调用了好几次,所以我们在$.ajaxSetup中考虑了每次方法调用时设置的一些设置。其中之一是dataType被设置为"text",contentType被设置成"application/json"。signalR似乎没有正确地覆盖全局ajax设置。我不确定这是一个错误还是预期行为,但如果是这样的话,应该更好地记录它(如果是,请随意称我们为傻瓜。:))

您的方法被调用RegisterSource,并且您在javascript中调用RegisterSourceegisterSource