В основном у меня есть 3 приложения. Веб-приложение, Nservicebus и собственный сервер signalr для моих концентраторов. В настоящее время я использую signalr версии .4. В основном веб-приложение инициирует соединение с собственным сервером при загрузке страницы. Пользователь выполняет действие, которое отправляет команду по служебной шине. Затем служебная шина подключается к сигнальному серверу, чтобы уведомить всех веб-клиентов.
Моя веб-страница:
<script src="http://localhost:8081/test/signalr/hubs" type="text/javascript"></script>
<script>
jQuery.support.cors = true;
var myHub;
$.connection.hub.url = 'http://localhost:8081/test/signalr/hubs';
$(function () {
myHub = $.connection.userAccountHub;
myHub.ChangeNameUpdated = function (connId) {
alert("recieved signalr message");
};
$.connection.hub.start().done(function() {
var myClientId = $.connection.hub.id;
setCookie("srconnectionid", myClientId);
});
});
</script>
Мой сервер SignalR:
static void Main(string[] args)
{
Debug.Listeners.Add(new ConsoleTraceListener());
Debug.AutoFlush = true;
string url = "http://localhost:8081/test/";
var server = new Server(url);
server.EnableHubs();
server.Start();
Console.WriteLine("Server running on {0}", url);
while (true)
strong text{
ConsoleKeyInfo ki = Console.ReadKey(true);
if (ki.Key == ConsoleKey.X)
{
break;
}
}
}
Мой концентратор внутри моего проекта сервера Signalr
public class UserAccountHub : Hub
{
public void UsersNameChanged(string passedThroughConnectionId)
{
Clients.ChangeNameUpdated(passedThroughConnectionId);
}
}
Мой звонок из моего nservicebus
//connect to signalRServer
var connection = new HubConnection("http://localhost:8081/test/signalr/hubs");
IHubProxy myHub = connection.CreateProxy("SignalRServer.Hubs.UserAccountHub");
//Credentials are inherited from the application
connection.Credentials = CredentialCache.DefaultNetworkCredentials;
var test = message.GetHeader("signalrConnectionId");
connection.Start().Wait();
myHub.Invoke("UsersNameChanged", message.GetHeader("signalrConnectionId")).ContinueWith(task =>
{
//for debuging purposes
if (task.IsFaulted)
{
Console.WriteLine(
"An error occurred during the method call {0}",
task.Exception.GetBaseException());
}
else
{
Console.WriteLine("Successfully called MethodOnServer");
}
});
Я открываю 2 браузера. Я инициирую процесс во втором браузере, и только первый получает уведомления. Второй браузер не работает.
Я также не вижу никаких проблем, которые выделяются, когда я запускаю скрипача.
Есть ли лучший подход к этой реализации, или я что-то упустил?
var connection = new HubConnection("http://localhost:8081/test/signalr/hubs");
Строка выше неверна. Вы создаете соединение с URL-адресом концентратора следующим образом:var connection = new HubConnection("http://localhost:8081/test/");
То же самое для URL-адреса концентратора javascript, он должен быть: $.connection.hub.url = 'localhost:8081/test/signalr'; - person davidfowl   schedule 07.05.2012