我正在构建一个Chrome扩展程序,它将与SignalR HUB进行交互。
HUB使用代理连接创建的本地文件正常工作。但是,我不能在chrome扩展中使用代理连接,因为它不在同一个项目中,因此我必须自己定义:
var connection = $.hubConnection('http://localhost:61xxx/signalr/hubs', {useDefaultPath: false});
var roomIndexHubProxy = connection.createHubProxy('roomIndexHub');
这样可以正常工作,如果我在服务器OnConnected
方法上使用断点,它会触发,我也会看到建立连接的日志。但是当我尝试运行自己的函数时,我得到了这个错误(在客户端):
SignalR:'test'方法无法解决。找不到该名称的方法。在Microsoft.AspNet.SignalR.Hubs.NullMethodDescriptor.b__0(IHub) emptyHub,Object [] emptyParameters)at Microsoft.AspNet.SignalR.Hubs.HubDispatcher.Incoming(IHubIncomingInvokerContext 上下文) ---从抛出异常的先前位置开始的堆栈跟踪结束--- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务) System.Runtime.CompilerServices.ConfiguredTaskAwaitable
1.ConfiguredTaskAwaiter.GetResult() at Microsoft.AspNet.SignalR.TaskAwaiterHelper.PreserveCultureAwaiter
1.GetResult() 在 Microsoft.AspNet.SignalR.Hubs.HubPipelineModule<> c__DisplayClass1< b__0> d__3.MoveNext()SignalR: roomindexhub.test无法执行。错误:'test'方法不可能 解决。找不到该名称的方法。
这是我的客户端代码:
var connection = $.hubConnection('http://localhost:61xxx/signalr/hubs', {useDefaultPath: false});
var roomIndexHubProxy = connection.createHubProxy('roomIndexHub');
connection.logging = true;
connection.start().done(function() {
// Wire up Send button to call RoomIndexHubProxy on the server.
console.log('Hub has started');
$("#signalr").click(function(){
roomIndexHubProxy.invoke('test');
});
});
connection.error(function (error) {
console.log('SignalR error: ' + error)
});
服务器端代码(虽然非常简单):
public class RoomIndexHub : Hub
{
public RoomIndexHub(){}
public override Task OnConnected()
{
return base.OnConnected(); // this works!
}
internal void test()
{
int i = 0; // this doesn't work
}
}
}
当我写这些文字时,我在Microsoft.AspNet.SignalR.Hubs.NullMethodDescriptor.b__0(IHub
emptyHub,Object [] emptyParameters)`。
但是我不知道为什么会这样,因为我确定了:
var roomIndexHubProxy = connection.createHubProxy('roomIndexHub');
我真的很感谢你的帮助!