SignalR和.NET Client无法在ASP.NET WebForms页面上运行

时间:2013-07-15 18:41:27

标签: asp.net webforms signalr

我尝试在.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!");
    }

}

1 个答案:

答案 0 :(得分:4)

你以错误的方式使用它

<强>第一 b和c都是客户端,服务器自己启动,你需要做的只是添加

RouteTable.Routes.MapHubs();

Application_Start
global.asax中的

方法

<强>第二

如果你打算使用网页作为客户端,你应该从javascript开始,因为你现在正在做的事情不会起作用,因为

connection.Start()

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

现在怎么办?这里需要很多页面,所以这里有几个链接

A Simple Tutorial

The Hubs Server API

The Hubs JavaScript API

如果您错过了a video that explains what is SignalR, how it works and a simple app,可以找到here