Отдельные сеансы с использованием элементов управления aXWebBrowser в приложении WinForms?

2

Как программно управлять несколькими браузерами (элемент управления aXWebBrowser) из одного процесса приложения winforms, ориентируясь на один и тот же удаленный веб-сайт, но каждый браузер, живущий в своей области сеанса с удаленным сайтом?

Цели - Создайте приложение, которое автоматизирует использование веб-сайта. Цель заключается в том, чтобы приложение выполняло работу до 5 пользователей, взаимодействующих с браузером на том же веб-сайте.

Очевидные проблемы - Каждый экземпляр браузера делится своими "сеансовыми" данными, отправленными ему удаленным веб-сайтом. В результате различные браузеры не могут действовать, как это делают многие пользователи. Независимо от того, какое количество различных элементов управления aXWebBrowser создается, каждый теряет контекст сеанса и разделяет контекст сеанса, установленный последним/последним/последним экземпляром браузера. Другими словами, последний запущенный элемент управления разрушает установленный контекст сеанса любого предшествующего ему элемента управления.

Уже пробовали - Добавление одного из следующих разделов реестра в "hkcu\software\microsoft\internet explorer\main": TabProcGrowth = DWORD: 0, FrameMerging = DWORD: 0, SessionMerging = DWORD: 0. При запуске IE8 с моего значка на рабочем столе (вне приложения) это отлично работает, IE8 ведет себя по своему желанию. Однако при запуске приложения, используя элементы управления axWewbBrowser, он работает, настройки реестра, похоже, не влияют на элементы управления axWebBrowser. Другие способы увидеть отключенное поведение вне приложения включают в себя: нажатие "Новый сеанс" в меню "Файл IE8" и запуск iexplore.exe с помощью -nomerge. Они не работают в приложении, потому что для управления axelineBrowser используется Wininet.

Ограничения - Существует значительный код, уже написанный и работающий с помощью aXWebBrowser Control (автоматический веб-браузер Internet Explorer ActiveX), поэтому идеальное решение не требует, чтобы код был переписан с новым элементом управления. - После того, как решение будет найдено, приложение будет обрабатывать окна (ов) браузера пользователю рабочей станции. - В приложении winforms (.NET 2.0) есть элементы управления - Все браузеры нацелены на один и тот же удаленный веб-сайт.

Теги:

1 ответ

0

Из того, что я мог сказать, до тех пор, пока каждый браузер загружается в тот же поток, IE всегда будет рассматривать их как один и тот же сеанс.

Я обошел эту проблему, создав новый поток и новое окно для каждого сеанса.

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    private static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        //// How many test windows do we need to create.
        int numberOfClients = 5;
        System.Threading.Thread[] threads = 
            new System.Threading.Thread[numberOfClients];

        //// Create threads for each of the windows, and then start them.
        for (int i = 0; i < numberOfClients; i++)
        {
            threads[i] = new System.Threading.Thread(Program.StartTest);
            threads[i].SetApartmentState(System.Threading.ApartmentState.STA);
            //// Passing in the startup parameters for each each instance.
            threads[i].Start(new StartupParameters(i));
        }

        //// This will keep the application running until 
        ////  all the windows are closed.
        foreach (System.Threading.Thread thread in threads)
        {
            thread.Join();
        }
    }

    /// <summary>
    /// Starts the test form.
    /// </summary>
    /// <param name="state">
    /// The state object containing our startup parameters.
    /// </param>
    private static void StartTest(object state)
    {
        StartupParameters parameters = state as StartupParameters;
        YourTestForm yourTestForm = new YourTestForm();

        //// Set the needed parameters before we run the form.  
        //// Add your parameters here.
        yourTestForm.Text = string.Format("Test form {0}", parameters.Index);

        //// Run the test.
        Application.Run(yourTestForm);
    }
}

/// <summary>
/// Contains the startup parameters used to configure 
/// each new instance of the test form.
/// </summary>
public class StartupParameters
{
    /// <summary>
    /// Initializes a new instance of the <see cref="StartupPramitures"/> class.
    /// </summary>
    /// <param name="index">The index.</param>
    public StartupParameters(int index)
    {
        this.Index = index;
    }

    /// <summary>
    /// The index for this test form.
    /// </summary>
    public int Index { get; private set; }
}
  • 0
    Я попробовал ваш пример кода (с установленным IE8) и все элементы управления браузером фактически используют один и тот же сеанс.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню