C# 升级到信号器1.0.0 Alpha 2时未触发OnConnected任务
我最近刚刚尝试升级到signalR 1.0.0 Alpha2。我浏览了维基,更改了我认为需要更改的内容,并确保程序集都加载了新文件。这是我的js:C# 升级到信号器1.0.0 Alpha 2时未触发OnConnected任务,c#,asp.net,signalr,C#,Asp.net,Signalr,我最近刚刚尝试升级到signalR 1.0.0 Alpha2。我浏览了维基,更改了我认为需要更改的内容,并确保程序集都加载了新文件。这是我的js: $(function () { var Chat = $.connection.ChatHub; ... $.connection.hub.start( .done(function(){ alert("Now connected!"); }) .fail(function(){ alert("Could no
$(function () {
var Chat = $.connection.ChatHub;
...
$.connection.hub.start(
.done(function(){ alert("Now connected!"); })
.fail(function(){ alert("Could not Connect!"); });
});
这是我的集线器类:
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));
}
}
}
在启动对方法的中心引用之前,应添加JavaScript:
$.connection.yourhub.client.connected = function () { };
$.connection.yourhub.client.disconnected = function () { };
问题是因为我使用的是未更新版本的NinjectDependencyResolver,我不确定他们是否更新了它。事实上,我已经停止在hub类中同时使用依赖项注入,因为我无法让它工作。我也遇到了这个问题,使用了一个非常简单的示例(基本上只有OnXXXX方法,其他什么都没有。框架的其余部分运行良好,只有这些不会启动的OnXXX方法。您有订阅吗?alpha的语法已更改,因此您可能根本不会订阅任何集线器方法。我没有订阅,这些是新版本中必需的吗?没有,它始终是必需的。@dfowler我发现是我的构造函数导致了这个问题,因为它没有被正确注入。我在你的博客文章中读到评论,你正在为signalr开发新的ninject更新,如果我去掉注入,只是在hub中实例化类而不注入它,我会面临任何性能问题吗问题?目前,我的系统一次可能只有30-50人,因此负载不是很大,或者其他什么。我有一个直接来自浏览器的裸体javascript客户端,可以成功连接,但不会触发服务器端连接和断开连接的事件。添加这两行代码可以工作。奇怪的是,我的系统中不需要这两行代码signalrI的asp.net或blackberry实现正在
$.connection.hub.start().done(函数(){/*…*/})内分配我的集线器客户端回调;
函数。当我将它们移到函数外部,使它们在调用$之前绑定。connection.hub.start
时,问题为我解决了。谢谢!我遇到了与尝试注入依赖项相同的问题,但我没有正确设置IOC。
$.connection.yourhub.client.connected = function () { };
$.connection.yourhub.client.disconnected = function () { };