Веб-браузер WPF, использующий несколько сеансов при открытии более одного раза - PullRequest
1 голос
/ 30 ноября 2011

У нас есть веб-браузер WPF в одном из наших подробных окон. Окно подробностей открывается, когда пользователь нажимает на результат поиска, поэтому может быть и будет открыто несколько окон подробностей со встроенным веб-браузером. URL-адрес указывает на приложение на основе Java, которое требует лицензии и настроено с NTLM для аутентификации пользователей.

Первое открытое окно в порядке, но если вы откроете больше, Java-приложение выдаст ошибку, что используются все лицензии. В IE все в порядке, вы можете открыть несколько окон этого Java-приложения и работать.

Есть ли что-то, что я могу настроить в веб-браузере, чтобы использовать только один сеанс, а затем очистить все, когда вы закрываете главное окно?

** Редактирование: обратите внимание от поставщика Java-приложения, что при подключении браузера JBoss-сервер создает JSessionID и что каждое другое соединение с этого компьютера должно использовать один и тот же JSessionID, даже разные браузеры. Элемент управления WPF делает что-то еще, потому что он создает сеанс для каждого открытого представления.

** Редактировать: введенные мною данные неверны. Представление, содержащее элемент управления браузера, является UserControl, а не окном.

** Редактирование: Если у меня нет сеансов и я запускаю IE / firefox и т. Д., Чтобы открыть приложение Java, я могу получить лицензию и использовать приложение. Теперь, когда у меня есть сеанс, если я попытаюсь использовать элемент управления WebBrowser, он попытается создать новый сеанс, и я получу ошибку о лицензии. Если я закрываю окна просмотра и браузера и пытаюсь подключиться снова, мне снова выдается ошибка лицензии, как будто элемент управления браузера как-то не выпускает этот сеанс.

Я могу опубликовать код, но я не понимаю, как это поможет, поскольку это просто простая вставка элемента управления xaml с исходным значением, установленным на веб-странице.

Ответы [ 2 ]

0 голосов
/ 15 декабря 2011

Вы можете попробовать обработать начальное подключение вручную, а затем использовать NavigateToString для визуализации результата. Примерно так:

String responseString;

HttpWebRequest request = build you request, incorporate session token, etc
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (StreamReader reader = new StreamReader(response.GetResponseStream())) {
    responseString = sr.ReadToEnd();
}
browser.NavigateToString(responseString);

EDIT:

Использование файлов cookie, источник :

public partial class WebBrowserControl : Form
{
        private String url;

        [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
        public static extern bool InternetSetCookie(string lpszUrlName, string lbszCookieName, string lpszCookieData);

        public WebBrowserControl(String path)
        {
            this.url = path;
            InitializeComponent();

            // set cookie
            InternetSetCookie(url, "JSESSIONID", Globals.ThisDocument.sessionID); 

            // navigate
            webBrowser.Navigate(url); 
        }
        ...
}
0 голосов
/ 08 декабря 2011

Есть ли способ разделить каждое окно / сеанс просмотра на отдельный домен приложения?

http://msdn.microsoft.com/en-us/library/system.appdomain.aspx

При выходе из окна вы можете выбросить этот домен приложения и ресурсы, используемые внутри.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...