Как получить соединение концентратора SignalR для работы в междоменном режиме?
Я пытаюсь получить супер-простое соединение концентратора, работающее в междоменном пространстве, но не повезло. Я читал десятки сообщений и делал все, что упоминалось, но до сих пор не добился успеха.
Мой серверный концентратор находится здесь
public class ChatHub : Hub
{
public void Send(string name, string message)
{
Clients.All.broadcastMessage(name, message);
}
}
Мой сервер MapHubs вызывается здесь
RouteTable.Routes.MapHubs(new HubConfiguration { EnableCrossDomain = true });
Любой мой javascript-клиент здесь
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<script src="~/Scripts/jquery-2.0.1.min.js"></script>
<script src="~/Scripts/jquery.signalR-1.1.2.min.js"></script>
<script src="/signalr/hubs"></script>
</head>
<body>
<div class="container">
<input type="text" id="displayname" value="Test" />
<input type="text" id="message" value="I'm here" />
<input type="button" id="sendmessage" value="Send" />
</div>
<script type="text/javascript">
$(function ()
{
$.connection.hub.url = 'http://<my url>/';
var chat = $.connection.chatHub;
alert(chat);
$.connection.hub.start().done(function ()
{
alert("Connection succeeded");
}).fail(function ()
{
alert("Connection failed");
});
});
</script>
</body>
</html>
Проблема заключается в том, что он никогда не достигает уведомлений о соединении с успешным или неудачным, а вызов alert (chat) возвращает undefined.
Я пробовал несколько комбинаций для строки $.connection.hub.url
$.connection.hub.url = 'http://<My url>';
$.connection.hub.url = 'http://<My url>/';
$.connection.hub.url = 'http://<My url>/signalr';
$.connection.hub.url = 'http://<My url>/signalr/';
Консоль разработчика в Chrome и Firebug дает мне ошибку
Uncaught Error: SignalR: Error loading hubs. Ensure your hubs reference is correct, e.g. <script src='/signalr/hubs'></script>.
В том же домене он работает нормально. Это действительно начинает сводить меня с ума, поэтому любая помощь будет оценена.
Спасибо,
Джейсон
Ответы
Ответ 1
На вашем сервере размещен кросс-домен, но вы пытаетесь получить хабы из текущего домена. Поэтому он не может получить файл концентраторов, и на самом деле у вас нет прокси-сервера (вот почему все не работает).
Итак, у вас есть два варианта:
Вот фрагмент кода о том, как вы можете использовать API-интерфейс для подключения хаба: http://www.asp.net/signalr/overview/hubs-api/hubs-api-guide-javascript-client#nogenconnection (второй фрагмент кода).