2

我正在构建一个可与SignalR HUB进行交互的Chrome扩展。从Chrome扩展连接到SignalR - error:方法无法解析

集线器工作正常,我的本地文件是用代理连接创建的。但是,我不能,因为它不是在同一个项目,所以我不得不把它定义自己使用Chrome扩展程序的代理连接:

var connection = $.hubConnection('http://localhost:61xxx/signalr/hubs', {useDefaultPath: false}); 
var roomIndexHubProxy = connection.createHubProxy('roomIndexHub'); 

这工作得很好,如果我使用断点的服务器OnConnected上方法它会触发,我也看到说连接的日志已经建立。但是,当我尝试运行我自己的功能,我得到这个错误(在客户端):

SignalR: 'test' method could not be resolved. No method found with that name. at Microsoft.AspNet.SignalR.Hubs.NullMethodDescriptor.b__0(IHub emptyHub, Object[] emptyParameters) at Microsoft.AspNet.SignalR.Hubs.HubDispatcher.Incoming(IHubIncomingInvokerContext context) --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.ConfiguredTaskAwaitable 1.ConfiguredTaskAwaiter.GetResult() at Microsoft.AspNet.SignalR.TaskAwaiterHelper.PreserveCultureAwaiter 1.GetResult() at Microsoft.AspNet.SignalR.Hubs.HubPipelineModule.<>c__DisplayClass1.<b__0>d__3.MoveNext().

SignalR: roomindexhub.test failed to execute. Error: 'test' method could not be resolved. No method found with that name.

这是我的客户端代码:

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

线

但是我不知道为什么,因为我做了定义这种情况正在发生:

var roomIndexHubProxy = connection.createHubProxy('roomIndexHub');

我将非常感谢您的帮助!

+1

'内部类型或成员只能在同一个程序集中的文件中访问 - 换言之,外部不可访问。虽然我不知道任何C#。 – wOxxOm

+0

哦,叹了口气,这很容易..有时你需要知道在哪里看我猜... 我很专注于客户端这个错误,我错过了这个简单的事情。 非常感谢! – LiranBo

回答

1

documentationinternal关键字说:

Internal types or members are accessible only within files in the same assembly

换句话说,外部无法进入,所以只需删除internal