javascript - SignalR:调用集线器方法时发生内部服务器错误

标签 javascript asp.net signalr signalr-hub

我已经使用 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 调用,但从未到达服务器。又进行了一些狩猎,我发现了一些可疑的东西,然后我就能够辨别出发生了什么。

我们正在为页面的其他部分使用 Ajax,并且多次调用 ajax 方法,因此我们已经将每次方法调用时设置的一些设置提取到 $.ajaxSetup 中。其中之一是将 dataType 设置为“text”,将 contentType 设置为“application/json”。似乎 signalR 没有正确覆盖全局 ajax 设置。我不确定这是一个错误还是预期的行为,但如果是这样的话,应该更好地记录它(如果是这样,请随时称我们为愚蠢。:))

关于javascript - SignalR:调用集线器方法时发生内部服务器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12382286/

相关文章:

javascript - 使用 ContextAPI 不会重新呈现其使用者,但内容已更改。为什么?

javascript - React-intl 是否支持根据位置转换国家/地区名称?

c# - 从 linq 中的类返回可枚举值?

c# - 什么更好 : DataSet or DataReader?

c# - 向 gridview 添加分页 asp.net

javascript - FormioJS : How to return values from data. 自定义选择?

c# - 如何允许 SignalR 使用 EF6 将更新从数据库推送到浏览器

angular - 类 'HubConnection' 的构造函数是私有(private)的,只能在类声明中访问

android - 输入调度超时(等待发送非键事件,因为触摸的窗口尚未完成对某些输入事件的处理

javascript - 如何使用javascript将文本框的内容复制到另一个文本框?