asp.net - SignalR 和 "Cannot perform runtime binding on a null reference"

标签 asp.net signalr

我正在尝试设置 SignalR,但在添加消息时不断收到以下错误:

"Cannot perform runtime binding on a null reference"

我的客户端代码如下所示:

commentHub.addMessage = function (message) {
    $('#divMessages').append(message);
};

我的服务器端代码如下所示:

public void Send(string message)
{
     Clients.addMessage(message);
}

我首先打开一个客户端代码所在的窗口,然后打开一个新页面,该页面从代码隐藏中调用 Send 方法。为了测试它,我只需调用 send 方法,如下所示:

protected override void OnPreRender(EventArgs e)
{
    base.OnPreRender(e);
    new TestHub().Send("Test");
}

我首先认为错误来自页面周期中错误位置的调用,因此我将其从 OnInit 移至 PreRender,但我仍然收到错误。现在我想知道是否必须从客户端执行发送命令才能更新它?

最佳答案

如果我理解正确的话,您想从服务器调用客户端方法。问题是服务器是一个集线器,基本上只是一种服务。您可以尝试按照@sinanakyazici 的建议进行操作,但这不是典型的交互。

如果您的目标是向已连接的客户端通知某些服务器事件,那么您可以按照此处的文档 ( https://github.com/SignalR/SignalR/wiki/Hubs ) 进行操作,最后一节名为“从集线器外部通过集线器进行广播”。请注意,在页面生命周期中,当页面刷新时,用户连接到中心。只有在页面加载并调用 javascript $.connection.start() 方法后,用户才会连接。即使您通过中心发送消息,导致页面刷新的用户也不会收到该消息。也就是说,有时您想要从代码隐藏向其他用户发送消息,这可以通过遵循 wiki 来完成,如下所示:

using SignalR.Infrastructure;

IConnectionManager connectionManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>();
dynamic clients = connectionManager.GetClients<MyHub>();
// invoke javascript method for all connected clients
clients.addMessage("Your message here");

对于您的具体要求,听起来您希望调用者获得有关某些长时间运行的任务的状态的反馈。您通常会在此处从客户端调用集线器,然后集线器将报告进度报告,直到完成,此时它可以触发已完成的回调。通常,这是使用以下方法完成的:

public void SomeTask(string message)
{
     dowork();
     // send message only to the invoker
     Caller.addMessage("50% complete");
     domorework();
     // send message only to the invoker
     Caller.addMessage("100% complete");
     // fire processComplete javascript function
     Caller.processComplete();
}

关于asp.net - SignalR 和 "Cannot perform runtime binding on a null reference",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9663318/

相关文章:

javascript - MVC Razor 应用程序中的 SignalR javascript

json - SignalR 2.0.0 beta2 IJsonSerializer 可扩展性

javascript - 当呈现的操作链接作为查询字符串返回时,如何解决 MVC3 的路由问题?

sql-server - 使用 SQL Server 扩展 SignalR - 我们多久可以清除一次数据?

asp.net - ASP.Net 的最佳免费文件管理器

c# - 部署 Angular 6 ASP.NET Core 应用程序

javascript - 将大型静态 Javascript 库与 ASP.NET bundle 在一起?

asp.net - EF 核心迁移 : Could not load assembly 'AssemblyName'

c# - 无法在单元测试中加载文件或程序集 'Newtonsoft.Json,版本 = 6.0.0.0

asp.net - O数据错误: "A value without a type name was found and no expected type is available." when calling Azure Active Directory Graph API