2012-11-22 58 views
4

我刚刚尝试升级到signalR 1.0.0 Alpha2。我浏览了wiki,改变了我认为需要改变的内容,并确保程序集全部加载了新文件。这里是我的JS:OnConnected任务不升级时升级到SignalR 1.0.0 alpha2

$(function() { 
    var Chat = $.connection.ChatHub; 
    ... 
    $.connection.hub.start(
    .done(function(){ alert("Now connected!"); }) 
    .fail(function(){ alert("Could not Connect!"); }); 
}); 

这里是我的HUB类:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using Microsoft.AspNet.SignalR.Hubs; 
using MyProject.Domain.Abstract; 
using Microsoft.AspNet.SignalR; 
using System.Threading.Tasks; 
using System.Diagnostics; 
using System.Web.Security; 
using MyProject.Domain.Entities; 
using System.Web.Script.Serialization; 
using System.Text.RegularExpressions; 
using MyProject.Domain.Concrete; 
using MyProject.Domain.Helpers; 
using System.Web.Mvc; 

namespace MyProject.Web.RealTime 
{ 
    public class ChatMessage 
    { 
     public string ChatId { get; set; } 
     public string Message { get; set; } 
     public string FullName { get; set; } 
     public string Time { get; set; } 
     public string School { get; set; } 
     public string Major { get; set; } 
     public string ImageUrl { get; set; } 
    } 
    [HubName("ChatHub")] 
    public class Chat : Hub 
    { 
     //Initialize Repoisotries 
     private IProfileRepository profileRepository; 
     private ISiteDataRepository siteDataRepository; 
     private IChatRepository chatRepository; 
     private IOnlineUserRepository onlineUserRepository; 
     private IRecentActivityRepository recentActivityRepository; 


     MembershipUser MainUser = Membership.GetUser(); 
     UserProfile MainProfile; 
     //In memory objects 
     //public static Dictionary<Guid, List<string>> onlineUsers = new Dictionary<Guid, List<string>>(); 


     //Constructor Injection for profile repository and site data repository 
     public Chat(IProfileRepository repo, ISiteDataRepository siteRepo, IChatRepository chatRepo, IOnlineUserRepository onlineUserRepo, IRecentActivityRepository recentActivityRepo) 
     {    
      profileRepository = repo; 
      siteDataRepository = siteRepo; 
      chatRepository = chatRepo; 
      onlineUserRepository = onlineUserRepo; 
      MainProfile = profileRepository.GetProfile((Guid)MainUser.ProviderUserKey); 
      recentActivityRepository = recentActivityRepo; 
     } 



     public override Task OnDisconnected() 
     { 

      disconnectUser(); 
      List<ContactItem> contacts = profileRepository.GetFollowedOnlineContacts(MainProfile.UserId); 
      foreach (ContactItem ci in contacts) 
      { 
       Clients.Group(Convert.ToString(ci.ChatId)).onlineUserHandler(Convert.ToString(MainProfile.ChatId), false); 
      } 
      return base.OnDisconnected(); 
     } 
     public override Task OnReconnected() 
     { 
      connectUser(); 
      List<ContactItem> contacts = profileRepository.GetFollowedOnlineContacts(MainProfile.UserId); 
      foreach (ContactItem ci in contacts) 
      { 
       Clients.Group(Convert.ToString(ci.ChatId)).onlineUserHandler(Convert.ToString(ci.ChatId), true); 
      } 
      return base.OnReconnected(); 
     } 
     public override Task OnConnected() 
     { 
      Debug.WriteLine("Connected``````````````````````````````````"); 
      connectUser(); 
      List<ContactItem> contacts = profileRepository.GetFollowedOnlineContacts(MainProfile.UserId); 
      foreach (ContactItem ci in contacts) 
      { 
       Clients.Group(Convert.ToString(ci.ChatId)).onlineUserHandler(Convert.ToString(MainProfile.ChatId), true); 
      } 
      return base.OnConnected(); 
     } 
     private void connectUser() 
     { 
      if (onlineUserRepository.ConnectUser(MainProfile.UserId, Context.ConnectionId)) 
      { 
       Groups.Add(Context.ConnectionId, Convert.ToString(MainProfile.ChatId)); 
      } 
     } 
     private void disconnectUser() 
     { 
      onlineUserRepository.DisconnectUser(MainProfile.UserId, Context.ConnectionId); 
      Groups.Remove(Context.ConnectionId, Convert.ToString(MainProfile.ChatId)); 
     } 





    } 
} 

在客户端,我得到的警告,指出IM连接,但是当我运行调试,并把一个破发点中“连接”任务,它永远不会在那里突破或在我的集线器类中运行任何东西。我可能做错了什么?

这是我的新SignalR组件:

enter image description here

我曾经在App_Start夹我NinjectWebCommon.cs文件来利用这一点,但自从我升级它给了我的错误,所以我注释掉,可能是问题,但还不能确定,因为signalR.ninject似乎并不奏效或者给了我一堆错误:

GlobalHost.DependencyResolver = new NinjectDependencyResolver(kernel); 
     GlobalHost.DependencyResolver.Register(typeof(IConnectionIdGenerator),() => new MyConnectionFactory()); 

    RouteTable.Routes.MapHubs(new NinjectDependencyResolver(kernel)); 
+1

我也得到这个问题,使用一个非常简单的例子(基本上只是OnXXXX方法,没有别的,框架的其余部分运行良好,只是这些OnXXX方法不会触发。 –

+1

你有任何订阅?语法已更改为alpha,因此您可能根本没有订阅任何中心方法。http://weblogs.asp.net/davidfowler/archive/2012/11/11/microsoft-asp-net-signalr.aspx – davidfowl

+0

我有没有订阅,在新版本中需要这些吗? – anthonypliu

回答

2

你应该在JavaScript启动枢纽参考方法之前添加:

$.connection.yourhub.client.connected = function() { }; 
$.connection.yourhub.client.disconnected = function() { }; 
+0

我有一个准系统JavaScript客户端直接从浏览器,可以成功连接但不触发服务器端连接和断开连接的事件。添加这两条线使它工作。奇怪的是,这两行并不是我的asp.net或blackberry执行signalr – Julien

+0

所必需的。我在'$ .connection.hub.start()中分配了我的集线器客户端回调函数(done(function(){/ * ...) * /});'函数。当我将它们移到函数之外时,它们在调用$ .connection.hub.start之前被绑定,这个问题就解决了。 – sffc

1

问题是因为我使用了NinjectDependancyResolver的非更新版本,我不确定他们是否更新了它。事实上,我已经停止使用依赖注入到我的集线器类中,因为我无法使它工作。

+0

谢谢!我遇到了同样的问题,因为我试图注入依赖项,但是我没有正确设置IOC。 –