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 中的方法

第二

如果您打算使用网页作为客户端,您应该从 javascript 中进行,因为您现在所做的将无法正常工作,因为

connection.Start()

是异步的,请求将在它执行任何操作之前结束,并且它不会等待传入的连接,因为所有连接都将被释放

现在该怎么做?这里需要很多页,所以这里有一些链接

一个简单的教程

Hubs 服务器 API

Hubs JavaScript API

万一您错过了,一个解释什么是 SignalR、它是如何工作的视频和一个简单的应用程序,您可以在这里找到

于 2013-07-15T21:49:20.820 回答