Соединение signalR разрывается после перенаправления в другое представление в приложении MVC3 - PullRequest
2 голосов
/ 02 ноября 2011

Я пытаюсь реализовать SignalR в моем существующем приложении MVC3 для отправки оповещений всем подключенным клиентам.Я использую постоянное соединение.Просто чтобы проверить это, я разместил кнопку трансляции на странице _Layout.Нажатие на кнопку широковещания отправляет некоторый текст, используя connection.send ($ ('# msg'). Val ());и успешно принят клиентами.Но это работает только тогда, когда сообщение транслируется с первой страницы / страницы по умолчанию при загрузке приложения.Когда страница перенаправлена, она теряет соединение и при нажатии кнопки Broadcast выдает сообщение об ошибке «SignalR: Соединение должно быть установлено, прежде чем данные могут быть отправлены.Вызовите .start () перед .send () ».Пожалуйста посоветуй.Вот код в моем примере приложения: Обратите внимание, что при переходе от Home к About соединение теряется.

<head>
<title>@ViewBag.Title</title>
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
<script src="@Url.Content("~/Scripts/jquery-1.6.4.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.signalR.js")" type="text/javascript"></script>
<script src="@Url.Content("~/signalr/hubs")" type="text/javascript"></script>

<script type="text/javascript">
$(function () {
    var connection = $.connection('echo');

    connection.received(function (data) {
        alert(data);
    });

    connection.start();

    $("#broadcast").click(function () {
        connection.send($('#msg').val());
    });
});
</script>

</head>
<body>
<input type="text" id="msg" />         
<input type="button" id="broadcast" value="Broadcast" />
<ul id="messages"></ul> 
<div class="page">

    <div id="header">
        <div id="title">
            <h1>My MVC Application</h1>
        </div>

        <div id="logindisplay">
            @Html.Partial("_LogOnPartial")
        </div>

        <div id="menucontainer">

            <ul id="menu">
                <li>@Html.ActionLink("Home", "Index", "Home")</li>
                <li>@Html.ActionLink("About", "About", "Home")</li>
            </ul>

        </div>
    </div>

    <div id="main">
        @RenderBody()
        <div id="footer">
        </div>
    </div>
</div>
</body>

1 Ответ

4 голосов
/ 03 ноября 2011

Соединение будет живым, пока клиент «жив». Если вы обновите браузер, откроется новое соединение. Возможно, у вас возникла проблема с URL, который вы передали в ctor соединения.

Если вы не используете концентраторы, вам не нужны ~ / signalr / концентраторы, включенные в вашу страницу.

Если вы перейдете к http://{siteUrl}/echo в новом окне браузера, что это говорит?

Возможно, вам нужно сделать что-то вроде:

var connection = $.connection('@Url.Content("~/echo")');

Но это зависит от того, как вы наметили маршрут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...