2

インデックス.cshtml

@{
    ViewBag.Title = "Index";
}
<script src="~/Scripts/jquery.signalR-2.0.0.min.js"></script>
<script>
$(function () {
    var connection = $.connection('/echo');

    connection.received(function (data) {
        $('#messages').append('<li>' + data + '</li>');
    });

    connection.start().done(function () {
        $("#broadcast").click(function () {
            connection.send($('#msg').val());
        });
    });

});
</script>
<input type="text" id="msg" />
<input type="button" id="broadcast" value="broadcast" />

<ul id="messages">
</ul>

startup.cs

using Microsoft.Owin;
using Owin;
using UI;

namespace UI
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.MapSignalR();
        }
    }
}

MyConnection.cs

public class MyConnection : PersistentConnection
{
    protected override Task OnConnected(IRequest request, string connectionId)
    {
        return Connection.Send(connectionId, "Welcome!");
    }

    protected override Task OnReceived(IRequest request, string connectionId, string data)
    {
        return Connection.Broadcast(data);
    }
}

私はsignalRが初めてです。プロジェクトを開始すると、次のエラーが発生します。

http://localhost:49820/echo/negotiate?clientProtocol=1.3&_=1383403303981 404 (見つかりません)

ここに画像の説明を入力

これの理由は何ですか?どうすれば修正できますか? この問題に関する解決策が見つかりません。(.net フレームワーク 4.5 および signalR 2.0)

4

1 に答える 1

5

現時点ではコードをデバッグできませんが、考えられる 2 つの問題を検討する必要があると思います。

1) 開始ハブ関数に「$.connection.hub」がありませんでした。また、サーバー側からクライアント側に受信したメソッドを呼び出す場合、「connection.client.received」を追加する必要があります。以下のようになります。

$(function () {
    var connection = $.connection('/echo');

    connection.client.received(function (data) {
        $('#messages').append('<li>' + data + '</li>');
    });

    $.connection.hub.start().done(function () {
        $("#broadcast").click(function () {
            connection.send($('#msg').val());
        });
    });

});

2) 永続的な接続をマップする必要があります。私はsignalR 1.xが次のようなものであるべきだと信じています:

RouteTable.Routes.MapConnection<MyConnection>("echo", "/echo");

ただし、SignalR 2.0 では、ハブの Startup クラスで次のことを行う必要があります。以下はほんの一例です。

public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.MapSignalR<MyConnection>("/echo");
        }
于 2013-11-02T17:27:15.527 に答える