3

私は、自己ホスト型のowinサーバーに対してjavascript signal-rクライアントを動作させようとしています。そして、この問題に直面しています。プロキシとプロキシなしの両方のメソッドを試しましたが、同じ結果とエラー「SignalR: ネゴシエーション要求中のエラー: 未定義」が発生しました。

クロスドメインのサンプルを問題なく実行できましたが、何が間違っているのかわかりません。誰かアイデアはありますか?

ブラウザ コンソールは、ネゴシエートの試みをログに記録し、失敗します。

サーバー/ハブ

namespace SignalROwinHost
{
    class Program
    {
        static void Main(string[] args)
        {
            string url = "http://localhost:9000/";
            using (WebApplication.Start<Startup>(url))
            {
                Console.WriteLine("Server running on {0}", url);
                Console.ReadLine();
            }
        }

        public class Startup
        {
            public void Configuration(IAppBuilder app)
            {
                app.MapHubs();
            }

        }

        public class ChatHub : Hub
        {
            public void Send(string message)
            {
                Clients.All.send(message);
            }
        }
    }
}

Javascript (プロキシなし):

<script type="text/javascript">
    $(function () {
        var connection = $.hubConnection('http://localhost:9000');
        var chat = connection.createHubProxy('chatHub');
        chat.on('send', function (message) {
            $('#chat').html($('#chat').html() + "\r\n" + message);
        });
        connection.logging = true;
        connection.start().done(function () {
            alert("Connection Complete");
            $('#sendBtn').click(function () {
                chat.invoke('send', $('#message').val());
            });
        }).fail(function (param) { alert(param); });
    });
</script>

Javascript (プロキシ):

<script src="http://localhost:9000/signalr/hubs" type="text/javascript"></script>
      <script type="text/javascript">
        $(function () {
            var chat = $.connection.chatHub;
            chat.client.send = function (message) {
                alert(message);
            };

            $.connection.hub.logging = true;

            $.connection.hub.url = "http://localhost:9000/signalr";

            $.connection.hub.start()
                .done(function (param) {
                    chat.server.send("Connected");
                })
                .fail(function (param) {
                    alert("Could not Connect: " + param);
                });
        });

  </script>
4

1 に答える 1

4

SignalR 1.0.0 を使用している場合 (正式にリリースされたので使用する必要があります)、MapHubsクロスドメイン要求を有効にするために呼び出しを変更する必要があります。これは、Web サイトがlocalhost:9000 から提供されていないことを前提としています。に URL を渡しているので、そうではないと思います$.hubConnection

app.MapHubs(new HubConfiguration { EnableCrossDomain = true });

1.0.0 の最終リリースより前は、CORS がデフォルトで有効になっていました。

于 2013-02-21T03:24:47.037 に答える