2

Je construis une extension Chrome qui interagira avec un HUB SignalR.Connexion à SignalR de l'extension Chrome - erreur: la méthode n'a pas pu être résolue

Le HUB fonctionne correctement avec mes fichiers locaux qui ont été créés avec la connexion proxy. Cependant, je ne peux pas utiliser la connexion proxy dans l'extension de chrome, car il est pas dans le même projet, donc je devais définir moi-même:

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

Cela fonctionne très bien, et si j'utilise un point d'arrêt sur le serveur OnConnected méthode, il fait feu, et je vois aussi que le journal qui dit la connexion a été établie. Mais quand je tente d'exécuter mes fonctions, je reçois cette erreur (sur côté client):

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.

Ceci est mon code côté client:

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) 
}); 

code côté serveur (bien que très simple) :

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 
     } 
    } 
} 

Comme je l'écris ces lignes que je vois ce `à Microsoft.AspNet.SignalR.Hubs.NullMethodDescriptor.b__0 (iHub

emptyHub, Object[] emptyParameters)`.

Mais je sais pas pourquoi cela se produit depuis que je l'ai fait définir:

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

J'apprécierais vraiment votre aide!

+1

'Les types ou membres internes ne sont accessibles que dans les fichiers d'un même assemblage - autrement dit inaccessibles de l'extérieur. Bien que je ne connais pas de C#. – wOxxOm

+0

oh soupir c'était si facile .. parfois vous avez besoin de savoir où chercher je suppose ... J'étais tellement concentré sur le côté client pour cette erreur que j'ai raté cette chose simple. Merci beaucoup! – LiranBo

Répondre

1

Le documentation pour internal mot-clé dit:

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

En d'autres termes, inaccessible à l'extérieur, donc il suffit d'enlever internal.