@yurabrg

Awesomium. Как настроить параллельную работу с несколькими WebView через Proxy?

Я работаю с .Net версией awesomium 1.7.5.1 и у меня возникла проблема. Если создать несколько (двух достаточно) WebView, работающие через прокси, то при одновременной загрузке страниц на этих WebView загружается только страница на одном из них, все остальные перестают отвечать и что-либо прогружать. Повторить проблему можно следующим кодом:

private static void Main()
        {
//Создаем поток, в котором будет жить обновление WebCore
            var isWebCoreRunning = false;
            var webCoreThread = new Thread(() =>
                                           {
                                               WebCore.Initialize(new WebConfig());
                                               WebCore.Run((sender, args) => isWebCoreRunning = true);
                                           }) {Name = "WebCore Thread", IsBackground = true};
//Запускаем поток и ждем, когда WebCore запустится
            webCoreThread.Start();
            while (!isWebCoreRunning)
                Task.Delay(10).Wait();

//Создаем параметры прокси сервера
            var proxyConfig = String.Format("{0}:{1}", "proxyHost", proxyPort);

//Создаем два WebView
            var webView1 = WebCore.DoWork(() =>
                                          {
                                              var webPreferences = new WebPreferences { ProxyConfig = proxyConfig };
                                              var webSession = WebCore.CreateWebSession(webPreferences);
                                              return WebCore.CreateWebView(100, 100, webSession);
                                          });
            var webView2 = WebCore.DoWork(() =>
                                          {
                                              var webPreferences = new WebPreferences { ProxyConfig = proxyConfig };
                                              var webSession = WebCore.CreateWebSession(webPreferences);
                                              return WebCore.CreateWebView(100, 100, webSession);
                                          });

//Подписываемся на событие запроса регистрации. Нужно, чтобы авторизовать прокси
            webView1.LoginRequest += OnLoginRequest;
            webView2.LoginRequest += OnLoginRequest;

//Подписываемся на успешную загрузку страницы
            webView1.LoadingFrameComplete += (sender, args) => Console.WriteLine("X");
            webView2.LoadingFrameComplete += (sender, args) => Console.WriteLine("X");

//Переходим одновременно по адресу
            WebCore.QueueWork(() => webView1.Source = new Uri("https://www.google.ru/"));
            WebCore.QueueWork(() => webView2.Source = new Uri("https://www.google.ru/"));

            Console.ReadKey();
        }

        private static void OnLoginRequest(object sender, LoginRequestEventArgs e)
        {
            e.Username = "proxyLogin";
            e.Password = "proxyPassword";
            e.Handled = EventHandling.Modal;
            e.Cancel = false;
        }


В итоге в консоль выведется только один "Х". Если прокси не прописывать, то все работает отлично и параллельно можно работать и загружать страницы с несколькими разными WebView.

Прошу помощи! Может кто-то встречался с такой проблемой или придумал способы обхода ее.
  • Вопрос задан
  • 2237 просмотров
Пригласить эксперта
Ответы на вопрос 1
Neuroware
@Neuroware
Программист в свободное от работы время
Возможно тут ситуация блокировки, попробуйте прогнать профилировщиком на наличие блокировок
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы