Signalr отправляет сообщение из браузера клиенту.net на той же машине

Нам нужно связать нативное приложение с веб-приложением.

Мы думаем использовать сигнализатор для отправки сообщения / команды.

Трубопровод будет:

  • Пользователь нажимает, чтобы совершить действие.
  • Javascript (с сигнализатором) отправляет сообщение на сервер в Azure.
  • Сервер повторно отправит сообщение конкретному клиенту. Это должен быть клиент, установленный на той же машине.
  • Как только результат завершен, NET отправляет полученный результат в обратном порядке.

Дело в том, как я могу найти клиента с той же машины в Сервере сигнализации?

Организация в нашей системе:

  • Есть центр / тренажерный зал.
  • В каждом центре есть сотрудники, которые могут войти.

Мы могли бы идентифицировать клиента в том же центре с некоторой конфигурацией файла. Сохранение нашего ключевого центра, например. Но в центре может быть установлено более одного клиента.NET на другом компьютере.

Мы думаем использовать частный IP-адрес компьютера, чтобы создать ключ на сервере сигнализатора.

var ips = [];

    var RTCPeerConnection = window.RTCPeerConnection ||
        window.webkitRTCPeerConnection || window.mozRTCPeerConnection;

    var pc = new RTCPeerConnection({
        // Don't specify any stun/turn servers, otherwise you will
        // also find your public IP addresses.
        iceServers: []
    });
    // Add a media line, this is needed to activate candidate gathering.
    pc.createDataChannel('');

    // onicecandidate is triggered whenever a candidate has been found.
    pc.onicecandidate = function (e) {
        if (!e.candidate) { // Candidate gathering completed.
            pc.close();
            console.log(ips);
            return;
        }
        var ip = /^candidate:.+ (\S+) \d+ typ/.exec(e.candidate.candidate)[1];

        ips.push(ip);
    };
    pc.createOffer(function (sdp) {
        pc.setLocalDescription(sdp);
    }, function onerror() { });

Эти данные можно получить в клиенте.NET без проблем. Но в javascript предыдущий код работает регулярно. На некоторых ПК он возвращает только ipv4. И в Мозилле это не работает.

Как мы можем идентифицировать обоих клиентов? Знаете ли вы другой способ достижения цели?

Спасибо,

1 ответ

Решение

Наконец, мы не нашли хорошего решения для фильтрации IP-адресов.

Мы сделали следующее:

Мы использовали схему URI для запуска нашего приложения. Окна схемы URI

    Public Class RegistrarURI


        Const URI_SCHEME As String = "xxx"
        Const URI_KEY As String = "URL:xxx"
        Частный общий APP_PATH как строка = Location.AssemblyDirectory() ' "C:\Program Files (x86)\xxx.exe"

        Публичный общий субрегистр UriScheme()

            Использование hkcrClass As RegistryKey = Registry.ClassesRoot.CreateSubKey(URI_SCHEME)
                hkcrClass.SetValue(ничего, URI_KEY)
                hkcrClass.SetValue("Протокол URL", [String].Empty, RegistryValueKind.[String])

                Использование defaultIcon As RegistryKey = hkcrClass.CreateSubKey("DefaultIcon")
                    Dim iconValue As String = [String].Format("""{0}"",0", APP_PATH)
                    defaultIcon.SetValue(Ничего, iconValue)
                Конец использования

                Использование оболочки As RegistryKey = hkcrClass.CreateSubKey("shell")
                    Использование open As RegistryKey = shell.CreateSubKey("open")
                        Использование команды As RegistryKey = open.CreateSubKey("команда")
                            Dim cmdValue As String = [String].Format("""{0}"" ""%1""", APP_PATH)
                            command.SetValue(ничего, cmdValue)
                        Конец использования
                    Конец использования
                Конец использования
            Конец использования
        End Sub

    Конечный класс

В веб-приложении Azure мы запускаем сервер SignalR. Этот сервер будет отправлять данные из нашего приложения.NET в Chrome.

Для этого при загрузке сети мы подключаемся к серверу signalR. Для создания deri, мы отправляем ID соединения из клиента Javascript в клиент.NET.

Затем, когда родной процесс завершен. Клиент.NET отправляет информацию на сервер signalR, и этот сервер зеркально отображает данные на клиенте javacript, используя идентификатор соединения.

Чтобы избежать запуска какого-либо экземпляра нашего собственного приложения, мы используем канал IPC для отправки данных в один экземпляр в предыдущий и закрытия нового.

Ссылка на источник Блог источник

Другие вопросы по тегам