2

既存の MVC3 アプリケーションに SignalR を実装して、接続されているすべてのクライアントにアラートを送信しようとしています。永続接続を使用しています。これをテストするために、_Layout ページにブロードキャスト ボタンを配置しました。ブロードキャスト ボタンをクリックすると、connection.send($('#msg').val()); を使用してテキストが送信されます。クライアントに正常に受信されます。ただし、これは、アプリの読み込み時にメッセージが最初/デフォルトのページからブロードキャストされた場合にのみ機能します。ページがリダイレクトされると、接続が失われ、[ブロードキャスト] ボタンをクリックすると、エラー メッセージ「SignalR: データを送信する前に接続を開始する必要があります。.send() の前に .start() を呼び出します。ご意見をお聞かせください。サンプル アプリケーションのコードは次のとおりです。 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>
4

1 に答える 1

4

接続は、クライアントが「生きている」限り存続します。ブラウザを更新すると、新しい接続が開きます。発生している可能性のある問題は、接続 ctor に渡した URL にあります。

ハブを使用していない場合は、ページに ~/signalr/hubs を含める必要はありません。

新しいブラウザ ウィンドウで http://{siteUrl}/echo に移動すると、何と表示されますか?

次のようなことをする必要があるかもしれません:

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

しかし、それはルートをどのようにマッピングしたかに基づいています。

于 2011-11-02T22:25:48.217 に答える