在asp.net中与SignalR建立唯一的服务器 - 客户端连接

问题描述 投票:0回答:1

我使用SignalR通过连接到网络的打印机从网站打印文档。当我在电脑上测试时,它工作正常。问题是当连接了多个PC时,因为它打印的副本数量与使用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);

    }

这是Windows窗体:

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

检查代码时,我怀疑问题的原因可能是“All”语句:

  Clients.All.imprimeReport(.......

因为很明显,它会将请求发送给所有连接的用户。但是,该指令应仅按照预期从发出请求打印的客户端PC进行。

c# asp.net signalr signalr-hub signalr.client
1个回答
0
投票

当客户端连接时,它们被赋予一个唯一的“连接ID”,存储在Context对象上(可以在处理该调用的Hub类的方法中访问)。

然后,您可以使用此ID向其发送消息,即:

Clients(Context.ConnectionId).SomeClientMethod();

听起来这就是你需要做的事情。请注意,因为连接ID是请求的一部分,所以如果您以后需要它,则需要将其存储在内存中以及设备的密钥或生成的操作,以便您可以适当地获取它。

© www.soinside.com 2019 - 2024. All rights reserved.