我拥有 SignalR 的所有 Nuget 位,我正在尝试使用我自己的 clientID 以及 SignalR 附带的依赖注入容器用于我的所有其他存储库等。现在奇怪的是这个连接到集线器的jQuery失败了:
debugger;
// Proxy created on the fly
var chat = $.connection.chat;
基本上,聊天对象变得未定义,就好像 SignalR 无法解析一样。一旦我尝试使用下面的代码覆盖 SignalR 的默认解析器,这种情况就开始发生。
我在这里想念什么?
我遇到的另一个问题是我不确定实现 IConnectionIdFactory 的 UserClientIDfactory 是否也能正常工作。
这是我 Global.asax 中的 MVC3 代码
private static IKernel CreateKernel()
{
var kernel = new StandardKernel();
RegisterServices(kernel);
return kernel;
}
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<UserIdClientIdFactory>()
.To<UserIdClientIdFactory>()
.InRequestScope();
//Rest of the other stuff to inject
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
//ninject calls to create the kernal etc
IKernel kernel = CreateKernel();
//TO DO using signal IR resolver
var resolver = new NinjectDependencyResolver(kernel);
SignalR.Hosting.AspNet.AspNetHost.SetResolver(resolver);
}
最后,这是我的自定义 clientIDfactory 的代码
public class UserIdClientIdFactory : IConnectionIdFactory
{
#region IConnectionIdFactory Members
string IConnectionIdFactory.CreateConnectionId(SignalR.Hosting.IRequest request)
{
// get and return the UserId here, in my app it is stored
// in a custom IIdentity object, but you get the idea
return HttpContext.Current.User.Identity.Name != null ?
//TO DO change to get profileID from Appfabric or the database and log user infor
HttpContext.Current.User.Identity.Name.ToString() :
Guid.NewGuid().ToString();
}
#endregion
}