2013-06-19 137 views
2

我刚刚开始使用SignalR,并且已经能够向所有连接的客户端广播消息而没有任何问题。我现在想让我的客户端(javascript)加入一个组,并只接收该组的消息。在我中心,我有以下方法添加到命名组连接:SignalR HTTP 500当从客户端调用服务器方法时

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)<--- 

如果我从我的JS中删除了对hub.server.joinGroup(tripIdentifier);的调用,那么我没有得到HTTP 500 /异常,所以看起来这条线是异常的来源。

任何关于我能做些什么来获得团体注册工作的建议将不胜感激。

谢谢!

回答

6

这是告诉你什么是错的堆栈的一部分:

---> (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 

基本上那是什么在说是集线器类没有参数的构造函数。如果您正在尝试为集线器设置依赖注入,则您在使用SignalR注册依赖关系解析器时会出现问题。如果您提供更多详细信息,我们也可以帮助您解决问题。

+0

谢谢德鲁!这是问题所在。我在我的集​​线器上进行DI操作,并在注册过程中搞砸了一些东西。碰巧,我已经重构了对集线器中任何依赖关系的需求,但仍然有参数化的构造函数,所以我刚刚摆脱了这一点。 –

相关问题