Я работаю над проектом WPF, я использую веб-браузер winform, чтобы сделать его доступным для веб-страницы, и обновляю данные с помощью WebSocket.Но есть странная проблема.Когда я щелкаю веб-браузер, чтобы обновить его 6 раз, или переключаюсь на другой интерфейс (закрытый, а затем открываю веб-браузер) 6 раз, веб-страница не может создать новый WebSocket и сообщает об ошибке сценария SecurityError
.
Я изменил ядро веб-браузера на IE11 в моем проекте.Я также нашел связанную информацию.Система Windows ограничивает количество подключений к веб-сокету в браузере IE.Размер по умолчанию - 6.
Согласно моему тесту, в IE (11) и Google Chrome при обновлении или закрытии страницы веб-сокет автоматически закрывается, а веб-браузер в WinForm - нет, если только весьПриложение закрыто, но вы можете написать сценарий js, чтобы страница активно закрывала экземпляр веб-сокета до закрытия страницы.но поскольку веб-страница предоставлена другими, мы не можем ее изменить, я могу только выполнить некоторую обработку внутри своего программного обеспечения.
Это демонстрация веб-страницы:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="content"></div>
<button onclick="test()">Test</button>
<script>
function test() {
let ws = new WebSocket('ws://localhost:3000/test');
let el = document.getElementById("content");
ws.onopen = function () {
console.log("[CLIENT] open()");
ws.send('Hello!');
};
ws.onmessage = function (message) {
console.log(message.data);
el.innerHTML = message.data
};
ws.onerror = function (err) {
el.innerHTML = err
}
}
</script>
</body>
</html>
Я думализ нескольких решений сейчас:
Используйте js, чтобы попытаться закрыть все веб-сокеты
Найдите способ настроить веб-браузер так, чтобы он мог автоматическизакройте веб-сокет при его обновлении и закрытии.
Используйте новый процесс для размещения Webbrowser, завершите процесс непосредственно при закрытии
НоЯ не знаю, как реализованы эти решения, надеюсь, есть лучшие способы и предложения.