WPF Webbrowser在多次打开时使用多个会话

WPF Webbrowser在多次打开时使用多个会话,wpf,browser,Wpf,Browser,我们的一个详细窗口上有一个WPF网络浏览器。当用户单击搜索结果时,“详细信息”窗口将打开,因此可以并且将会有多个嵌入此webbrowser的详细信息窗口打开。URL指向一个基于Java的应用程序,该应用程序需要许可证,并使用NTLM配置以对用户进行身份验证 第一个打开的窗口很好,但是如果您打开更多,java应用程序会显示一个错误,即所有许可证都已使用。在IE中,一切正常,您可以打开此java应用程序的多个窗口,然后继续工作 我是否可以在webbrowser上配置只使用一个会话,然后在关闭主窗口时

我们的一个详细窗口上有一个WPF网络浏览器。当用户单击搜索结果时,“详细信息”窗口将打开,因此可以并且将会有多个嵌入此webbrowser的详细信息窗口打开。URL指向一个基于Java的应用程序,该应用程序需要许可证,并使用NTLM配置以对用户进行身份验证

第一个打开的窗口很好,但是如果您打开更多,java应用程序会显示一个错误,即所有许可证都已使用。在IE中,一切正常,您可以打开此java应用程序的多个窗口,然后继续工作

我是否可以在webbrowser上配置只使用一个会话,然后在关闭主窗口时清除所有内容

**编辑:Java应用程序供应商指出,当浏览器连接JBoss服务器时,会创建一个JSessionID,并且来自该计算机的每个其他连接都应该使用相同的JSessionID,甚至是不同的浏览器。WPF控件正在执行其他操作,因为它正在为每个打开的视图创建会话

**编辑:我输入的初始详细信息不正确。包含浏览器控件的视图是用户控件而不是窗口

**编辑:如果我没有会话并启动IE/firefox等来打开Java应用程序,我可以获得许可证并使用该应用程序。现在我有了一个会话,如果我尝试使用WebBrowser控件,它将尝试创建一个新会话,我将得到一个关于许可证的错误。如果我关闭视图和浏览器窗口并再次尝试连接,我将再次收到许可证错误提示,好像浏览器控件不知何故没有释放该会话


我可以发布代码,但我看不出这会有什么帮助,因为它只是简单地将控件的xaml插入,并将源值设置为网页。

有没有办法将每个窗口/浏览会话分离到不同的appdomain中


退出窗口时,您可以抛出appdomain和其中使用的资源。

您可以尝试手动处理初始连接,然后使用来呈现结果。大概是这样的:

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);
编辑:

使用cookies:


我明天会试试这个让你知道。。。ThanksHow我是否从IE或其他浏览器获取会话令牌。这就是问题所在。我确信代码运行良好,它可以从IE、firefox甚至chrome获得JSessionID,如果它已经打开并连接到JBoss。此外,如果我使用WPF浏览器打开JBoss,我如何再次将会话cookie返回给其他浏览器。如果打开IE,然后打开Firefox,会发生什么?连接是否同时在两个浏览器中工作?你不能在浏览器之间真正共享cookie或会话。你是对的,它在IE中打开后在FF中不起作用。我想WPF到IE的部分至少会起作用。因此,对于JBoss和JSessionID,似乎没有办法使用它???@John:您应该能够访问IE和WebBrowser控件中保存在cookie中的JSessionID。我添加了一个示例,说明如何在WebBrowser控件中使用cookies。
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); 
        }
        ...
}