У меня есть все биты Nuget для SignalR, я пытаюсь использовать свои собственные clientIDs, а также контейнер внедрения зависимостей, который поставляется с SignalR, для всех других моих репозиториев и тому подобного. Теперь странно то, что jQuery не может подключиться к концентратору:
debugger;
// Proxy created on the fly
var chat = $.connection.chat;
По сути, объект чата становится неопределенным, как будто SignalR не может быть разрешен. Это начало происходить, когда я попытался переопределить распознаватель по умолчанию для SignalR с кодом ниже.
Что мне здесь не хватает?
Другая проблема, с которой я столкнулся, заключается в том, что я не уверен, что мой UserClientIDfactory реализует IConnectionIdFactory.
работает либо.
Вот код MVC3 в моем Global.asax
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
}