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

3

我最近几天一直在尝试使用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");
});

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


这个问题与IT技术有关。

2个回答

4
前言:我在这个项目中是edobry团队的后端人员,所以这次前端开发对我来说是新的和有趣的。
经过仔细分析代码,当我逐步执行项目时,发现请求变量中的POST数据为空。尽管数据已正确地发送到$.ajax调用,但却从未到达服务器。进一步搜索后,我发现了一些可疑的东西,然后与edobry商讨并确定了发生了什么事情。
我们在页面的其他部分使用Ajax,并且多次调用ajax方法,因此我们已将每个方法调用设置的一些设置因素提取到了$.ajaxSetup中。其中一个是将dataType设置为"text",contentType设置为"application/json"。似乎signalR未能正确覆盖全局ajax设置。如果这是一个bug或者意图行为,那么应该更好地记录下来(如果是,则请随意称我们为傻瓜:))。

dataTypecontentType的确切类型是什么? - Stiger

1
您的方法名为RegisterSource,但在JavaScript中您却调用了registerSources而不是registerSource

谢谢您的快速回复和出色的库!不过那并不是问题所在,我只是在复制代码时打错了一个字... 我逐步检查了我的JS调用,一切都很好,一直到signalR代码中的$.ajax调用。 - edobry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接