Я использую SignalR для печати документа с веб-сайта через принтер, подключенный к сети. Когда я тестирую его на компьютере, он работает нормально. Проблема возникает, когда подключено более одного компьютера, поскольку он печатает столько копий, сколько компьютеров подключено с помощью SignalR.
Это html-код:
$(document).ready(function () {
var myHub = $.connection.myHub;
var direccionWeb = $("#direccionWeb").val().toString();
$.connection.hub.url = direccionWeb + "/signalr";
$.connection.hub.start().done(function () {
myHub.server.broadcastMessageToPrinterReportTicket(global_venta, global_mesa, nombregarzon, idgrupo, grupo);
}).fail(function (error) {
console.error(error);
});
});
Это файл HUB:
public void BroadcastMessageToPrinterReportTicket(String global_venta, String global_mesa, String nombregarzon, String idgrupo, String grupo)
{
string nombreImpresora = grupo;
//resto de código para obtener datos.......
String nombreRDLC = "report_ticket.rdlc";
String nombreDataSet = "DataSet_ticket";
Clients.All.imprimeReport(nombreImpresora, parametros, dt, nombreRDLC, nombreDataSet);
}
Это форма окна:
public partial class Form1 : Form
{
HubConnection hubConnection;
IHubProxy hubProxy;
//Install-Package HtmlRenderer.PdfSharp -Version 1.5.0.6
public Form1()
{
InitializeComponent();
IncializaSignalR();
hubConnection.Closed += IncializaSignalR;
hubConnection.Start().Wait();
}
private void IncializaSignalR()
{
String direccionServer = "https://mipaginaweb.cl";
hubConnection = new HubConnection(direccionServer + "/signalr/hubs");
hubProxy = hubConnection.CreateHubProxy("MyHub");
CheckForIllegalCrossThreadCalls = false;
hubProxy.On<String, ReportParameter[], DataTable, String, String>("imprimeReport", (nombreImpresora, parametros, dt, nombreRDLC, nombreDataSet) =>
{
//Instrucción de código para imprimir con reportviewer
}
});
}
При проверке кода я подозреваю, что причиной проблемы может быть оператор «Все»:
Clients.All.imprimeReport(.......
Потому что, судя по всему, он отправляет запрос всем подключенным пользователям. Однако инструкция должна идти только с ПК клиента, сделавшего запрос на печать, как и предполагалось.