Nous avions une solution pour envoyer un fichier à l'aide de client SignalR .Net Nous avons déménagé à .Net de base En solution précédente .net, nous utilisé pour contexte Hub via GlobalHost.ConnectionManager
comment envoyer un fichier binaire au client SignalR du serveur dans le noyau dotnet
var myHub = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
myHub.Clients.Client(connectionId).doStuffWithFile(fileByteArray, fileName);
où dans le côté client, fonction doStuffWithFile
serait déclenchée avec les deux arguments.
Dans nouvelle solution .Net Core J'ai créé une classe Hub en dérivant de Hub. J'ai ajouté une méthode d'envoi pour envoyer un fichier au client spécifique et non la diffusion à tous
public class MyHub : Hub
{
private static string _connectionId;
public override Task OnConnectedAsync()
{
_connectionId = Context.ConnectionId;
return Task.CompletedTask;
}
public override Task OnDisconnectedAsync(Exception exception)
{
_connectionId = Context.ConnectionId;
//// remove Connection Id
return base.OnDisconnectedAsync(exception);
}
public async Task Send(byte[] fileByteArray, string fileName)
{
await Clients.Client(_connectionId).InvokeAsync("doStuff", fileByteArray, fileName);
}
}
Cependant, je ne dispose d'aucun mécanisme dans le noyau .Net, comme GlobalHost ou ConnectionManager pour obtenir HubContext pour envoyer le fichier.
Du côté client:
static void Main(string[] args)
{
var connection = new HubConnectionBuilder()
.WithUrl("http://localhost:25786/file")
.WithConsoleLogger()
.Build();
connection.On<byte[], string>("doStuff", DoStuff);
connection.StartAsync().ContinueWith(
task =>
{
if (task.IsFaulted)
{
Console.WriteLine("Connection faulty");
}
});
Console.ReadLine();
}
private static void DoStuff(byte[] data, string name)
{
File.WriteAllBytes(@"c:\Projects\" + name, data);
}
J'ai essayé de créer une nouvelle instance de MyHub pour appeler la méthode Send, mais simplement ça ne marche pas. Pourriez-vous s'il vous plaît me conseiller comment faire cela?
Copie possible de https://stackoverflow.com/questions/46332651/signalr-call-client-methods-from-outside-the-hub-class-aspnetcore – Pawel