0

MVC4 アプリで SignalR を設定しようとしています。

問題は、パス /signalr/hubs を参照するとコードが表示されますが (フィドラーは /signalr/hubs に対して 200OK を表示します)、ハブへの参照が含まれていないようで、クライアント側のコードも含まれていません。ハブとメソッドを参照してください。

デバッグを開始すると、次のエラーが表示されます (IIS Express、VS Express 2012):

オブジェクトには送信メソッドがありません 未定義のプロパティ 'messageAll' を設定できません

Global.asax の Application_Start には以下が含まれます。

        //RouteTable.Routes.MapHubs("/signalr", new HubConfiguration());
        RouteTable.Routes.MapHubs();
        RouteConfig.RegisterRoutes(RouteTable.Routes);

(これで/signalr/hubsが生成されると思いますが、これは機能しているようですが、実際のハブには何もリンクしていません。両方のオプションを試してみました)。

私のプロジェクトでは、MessageHub.cs を使用してルートに "Hubs" フォルダーを取得しました。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;

namespace Prj.Hubs 
{
[HubName("messagehub")]
public class MessageHub : Hub
{
    public void MessageAll(string message)
    {
        Clients.All.writeMessage(message);
    }

    public void MessageOthers(string message)
    {
        Clients.Others.writeMessage(message);
    }

    public void MessageSingle(string message)
    {
        
    }
}

}

私の _Layout.cshtml には、終了タグの直前にあります:

<script type="text/javascript" src="~/Scripts/jquery-1.9.1.js"></script>
    <script type="text/javascript" src="~/Scripts/jquery.signalR-1.1.2.js"></script>
    <script src="/signalr/hubs" type="text/javascript"></script>
    <script type="text/javascript">
        $(document).ready(function () {

            // create proxy on the fly
            var proxy = $.connection.messagehub; // this connects to our 'messageHub' Hub as above

            // for SignalR to call the client side function we need to declare it with the Hub
            proxy.messageAll = function (message) {
                $('#messages').append('<li>' + message + ''); // when the Hub calls this function it appends a new li item with the text 
            };

            // declare function to be called when button is clicked 
            $("#broadcast").click(function () {
                // calls method on Hub and pass through text from textbox 
                proxy.messageAll($("#message").val());
            });

            // Start the connection 
            $.connection.hub.start();
        });
    </script>

(補足 - SignalR は @Scripts.Render("~/bundles/jquery") をまったく好きではありませんでしたが、直接の jquery スクリプト インクルードは機能しているようです)。

では、なぜ「messagehub」を正確に認識しないのでしょうか?

4

1 に答える 1

1

私はこれを解決しました - 私のソリューションには複数のプロジェクトが含まれており、SignalR をアンインストールしましたが、bin/Debug フォルダー内のこれらのプロジェクトの一部には、数か月前に試した古い SignalR バージョンの痕跡がまだ残っていました。

実行時に、SignalR はいくつかの古い dll を新しい参照に接続しようとしていました。したがって、このエラーがある場合は、

  • SignalR をアンインストールする
  • ソリューション フォルダー全体で「SignalR」を検索し、すべてを削除します。
  • Nuget Package Manager から SignalR を再インストールします。
于 2013-06-02T17:26:08.877 に答える