3

.NET 4 の WebForms アプリケーションでダッシュボードの通知を作成しようとしています。SignalR バージョン 1.2 (.net クライアントとサーバーの両方) をダウンロードし、簡単な通知の例を用意しました。残念ながら、それは機能せず、理由がわかりません。http://myserver.com/notificationSample/signalr/hubsと入力すると、javascript プロキシが表示され、問題ないように見えます。

以下の実装を見てください。誰かバグを見つけましたか?

a) ハブの実装

[HubName("NewMessage")]
public class NewMessageNotifier : Hub
{
    public void NotifyDashboards()
    {

        Clients.All.NewMessageCreated();
    }
}

b) 通知発信者 (サーバー) ~/Pages/NotificationCaller.aspx

public partial class NotificationCaller : Page
{
    private HubConnection connection;
    private IHubProxy proxy;

    protected void Page_Load(object sender, EventArgs e)
    {
            connection = new HubConnection( "http://myserver.com/notificationSample" );

            proxy = connection.CreateHubProxy( "NewMessage" );

            connection.Start().Wait();                

    }
    // it is handler for onclick event on Button control
    protected void NotifyDashboard(object sender, EventArgs e)
    {
        proxy.Invoke( "NotifyDashboards" ).Wait();
    }
}

c) ダッシュボード (クライアント、リスナー) ~/Pages/Dashboard.aspx

public partial class Dashboard: BasePage
{
    private HubConnection connection;

    protected void Page_Load(object sender, EventArgs e)
    {
        connection = new HubConnection( "http://myserver.com/notificationSample" );

        var proxy = connection.CreateHubProxy("NewMessage");

        proxy.On("NewMessageCreated", ShowNotification);

        connection.Start();
    }

    private void ShowNotification()
    {
        ShowAlert("New message added!");
    }

}
4

1 に答える 1

4

あなたはそれを間違った方法で使用しています

最初 に b と c の両方がクライアントであり、サーバーが自動的に開始されます。必要なのは追加することだけです。

RouteTable.Routes.MapHubs();

Application_Start

global.asax のメソッド

2番

Web ページをクライアントとして使用する場合は、javascript から行う必要があります。現在行っていることは機能しないためです。

connection.Start()

非同期であり、リクエストは何かを行う前に終了し、すべてが破棄されるため、着信接続を待機しません

今それを行う方法は?ここには多くのページが必要なので、ここにいくつかのリンクがあります

簡単なチュートリアル

ハブ サーバー API

ハブ JavaScript API

見逃した方のために、SignalR とは何か、そのしくみと簡単なアプリを説明するビデオをこちらでご覧いただけます

于 2013-07-15T21:49:20.820 に答える