从Chrome扩展程序连接到SignalR - 错误:无法解决方法

时间:2015-11-08 12:57:06

标签: google-chrome google-chrome-extension signalr signalr-hub signalr.client

我正在构建一个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');

我真的很感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

internal关键字documentation表示:

  

内部类型或成员只能在同一程序集中的文件中访问

换句话说,外部无法访问,因此只需删除internal