我尝试在.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!");
}
}
答案 0 :(得分:4)
你以错误的方式使用它
<强>第一强> b和c都是客户端,服务器自己启动,你需要做的只是添加
RouteTable.Routes.MapHubs();
到
Application_Start
global.asax中的方法
<强>第二强>
如果你打算使用网页作为客户端,你应该从javascript开始,因为你现在正在做的事情不会起作用,因为
connection.Start()
是异步的,请求将在它执行任何操作之前结束,并且它不会等待传入连接,因为所有连接都将被处理
现在怎么办?这里需要很多页面,所以这里有几个链接
如果您错过了a video that explains what is SignalR, how it works and a simple app,可以找到here