Signalr 从客户端调用服务器方法时发出HTTP 500信号
我刚刚开始使用SignalR,能够将消息广播到所有连接的客户端,没有任何问题。我现在想让我的客户端(javascript)加入一个组,只接收该组的消息。在我的集线器中,我使用以下方法向命名组添加连接:Signalr 从客户端调用服务器方法时发出HTTP 500信号,signalr,signalr-hub,signalr.client,Signalr,Signalr Hub,Signalr.client,我刚刚开始使用SignalR,能够将消息广播到所有连接的客户端,没有任何问题。我现在想让我的客户端(javascript)加入一个组,只接收该组的消息。在我的集线器中,我使用以下方法向命名组添加连接: public Task JoinGroup(string groupName) { return this.Groups.Add(Context.ConnectionId, groupName); } 在客户端上,我有以下JS: var l
public Task JoinGroup(string groupName)
{
return this.Groups.Add(Context.ConnectionId, groupName);
}
在客户端上,我有以下JS:
var latLonBounds = new google.maps.LatLngBounds();
var tripIdentifier = '@Model.TripIdentifier';
$(function () {
var hub = $.connection.locationHub;
hub.client.updateLocation = function (coordinates) {
// Implementation omitted
});
latLonBounds.extend(position);
map.fitBounds(latLonBounds);
};
$.connection.hub.logging = true;
$.connection.hub.start().done(function() {
hub.server.joinGroup(tripIdentifier);
});
});
当我的页面加载时,在Chrome中,我在控制台中看到以下URL的HTTP 500:
http://localhost:49914/signalr/send?transport=serverSentEvents&connectionToken=AQAAANCMnd8BFdERjHoAwE%2FCl%2BsBAAAA8OmZGDrRfEaOjaHahkkarwAAAAACAAAAAAAQZgAAAAEAACAAAADM78kCBInmZa7OROdPoXraiugBXLR5Xu3htxYC2JSnSAAAAAAOgAAAAAIAACAAAAAZwnPx6GMKOiw%2FivqQPlSfCb4WNP342YxvGyBpalmjSDAAAADljl1vg%2F7GYtD3R4AA2A9LXEnNZkyQVQjDUrW7ZVbvfPpWz1GCcOn6aw5yrkrWFrhAAAAAyX5otz0Xhx8tuIRgX2Pr1b9ZWFMvoairvqzns1%2FhjN%2BRhDIuAqAfonTbsZDjkdyDAZXzAKQqwTEKhpa5LYBhKg%3D%3D
在Visual Studio中,我看到以下堆栈跟踪:
SignalR exception thrown by Task: System.AggregateException: One or more errors occurred. ---> System.MissingMethodException: No parameterless constructor defined for this object.
at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.Activator.CreateInstance(Type type, Boolean nonPublic)
at System.Activator.CreateInstance(Type type)
at Microsoft.AspNet.SignalR.Hubs.DefaultHubActivator.Create(HubDescriptor descriptor)
at Microsoft.AspNet.SignalR.Hubs.DefaultHubManager.ResolveHub(String hubName)
at Microsoft.AspNet.SignalR.Hubs.HubDispatcher.CreateHub(IRequest request, HubDescriptor descriptor, String connectionId, StateChangeTracker tracker, Boolean throwIfFailedToCreate)
at Microsoft.AspNet.SignalR.Hubs.HubDispatcher.OnReceived(IRequest request, String connectionId, String data)
at Microsoft.AspNet.SignalR.PersistentConnection.<>c__DisplayClassa.<>c__DisplayClassc.<ProcessRequest>b__7()
at Microsoft.AspNet.SignalR.TaskAsyncHelper.FromMethod(Func`1 func)
--- End of inner exception stack trace ---
---> (Inner Exception #0) System.MissingMethodException: No parameterless constructor defined for this object.
at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.Activator.CreateInstance(Type type, Boolean nonPublic)
at System.Activator.CreateInstance(Type type)
at Microsoft.AspNet.SignalR.Hubs.DefaultHubActivator.Create(HubDescriptor descriptor)
at Microsoft.AspNet.SignalR.Hubs.DefaultHubManager.ResolveHub(String hubName)
at Microsoft.AspNet.SignalR.Hubs.HubDispatcher.CreateHub(IRequest request, HubDescriptor descriptor, String connectionId, StateChangeTracker tracker, Boolean throwIfFailedToCreate)
at Microsoft.AspNet.SignalR.Hubs.HubDispatcher.OnReceived(IRequest request, String connectionId, String data)
at Microsoft.AspNet.SignalR.PersistentConnection.<>c__DisplayClassa.<>c__DisplayClassc.<ProcessRequest>b__7()
at Microsoft.AspNet.SignalR.TaskAsyncHelper.FromMethod(Func`1 func)<---
任务引发的信号器异常:System.AggregateException:发生了一个或多个错误。-->System.MissingMethodException:未为此对象定义无参数构造函数。
在System.RuntimeTypeHandle.CreateInstance(RuntimeType类型、Boolean publicOnly、Boolean noCheck、Boolean&canBeCached、RuntimeMethodHandleInternal&ctor、Boolean&bNeedSecurityCheck)
位于System.RuntimeType.CreateInstanceSlow(布尔publicOnly、布尔skipCheckThis、布尔fillCache、StackScrawlMark和stackMark)
位于System.RuntimeType.CreateInstanceDefaultCtor(布尔publicOnly、布尔skipCheckThis、布尔fillCache、StackScrawlMark和stackMark)
位于System.Activator.CreateInstance(类型,布尔非公共)
位于System.Activator.CreateInstance(类型)
位于Microsoft.AspNet.signal.Hubs.DefaultHubActivator.Create(HubDescriptor描述符)
位于Microsoft.AspNet.signal.Hubs.DefaultHubManager.ResolveHub(字符串hubName)
在Microsoft.AspNet.signal.Hubs.HubDispatcher.CreateHub(IRequest请求、HubDescriptor描述符、字符串连接ID、StateChangeTracker跟踪器、布尔ThrowFailedToCrate)
位于Microsoft.AspNet.signal.Hubs.HubDispatcher.OnReceived(IRequest请求、字符串连接ID、字符串数据)
在Microsoft.AspNet.signal.PersistentConnection.c_uudisplayClassA.c_uudisplayClassC.b_u7()中
位于Microsoft.AspNet.signal.TaskAsyncHelper.FromMethod(Func`1 Func)
---内部异常堆栈跟踪的结束---
--->(内部异常#0)System.MissingMethodException:未为此对象定义无参数构造函数。
在System.RuntimeTypeHandle.CreateInstance(RuntimeType类型、Boolean publicOnly、Boolean noCheck、Boolean&canBeCached、RuntimeMethodHandleInternal&ctor、Boolean&bNeedSecurityCheck)
位于System.RuntimeType.CreateInstanceSlow(布尔publicOnly、布尔skipCheckThis、布尔fillCache、StackScrawlMark和stackMark)
位于System.RuntimeType.CreateInstanceDefaultCtor(布尔publicOnly、布尔skipCheckThis、布尔fillCache、StackScrawlMark和stackMark)
位于System.Activator.CreateInstance(类型,布尔非公共)
位于System.Activator.CreateInstance(类型)
位于Microsoft.AspNet.signal.Hubs.DefaultHubActivator.Create(HubDescriptor描述符)
位于Microsoft.AspNet.signal.Hubs.DefaultHubManager.ResolveHub(字符串hubName)
在Microsoft.AspNet.signal.Hubs.HubDispatcher.CreateHub(IRequest请求、HubDescriptor描述符、字符串连接ID、StateChangeTracker跟踪器、布尔ThrowFailedToCrate)
位于Microsoft.AspNet.signal.Hubs.HubDispatcher.OnReceived(IRequest请求、字符串连接ID、字符串数据)
在Microsoft.AspNet.signal.PersistentConnection.c_uudisplayClassA.c_uudisplayClassC.b_u7()中
在Microsoft.AspNet.signal.TaskAsyncHelper.FromMethod(Func`1 Func)中,这是堆栈的一部分,用于告诉您发生了什么问题:
---> (Inner Exception #0) System.MissingMethodException: No parameterless constructor defined for this object.
at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.Activator.CreateInstance(Type type, Boolean nonPublic)
at System.Activator.CreateInstance(Type type)
at Microsoft.AspNet.SignalR.Hubs.DefaultHubActivator.Create(HubDescriptor descriptor
基本上,这说明您的hub类没有无参数构造函数。如果您试图为集线器设置依赖项注入,那么您似乎在向SignalR注册依赖项解析程序时遇到问题。如果您提供更多详细信息,我们可能还可以帮助您修复该问题。谢谢!这就是问题所在。我在轮毂上做DI,把注册搞砸了。碰巧的是,我已经在我的中心重构出了对任何依赖项的需求,但仍然有参数化构造函数在那里,所以我刚刚摆脱了它。