【发布时间】:2012-06-26 13:26:15
【问题描述】:
我希望构建一个 WPF(或 Windows 窗体,如果它可以解决问题),它可以同时显示具有不同凭据的同一网页(它是具有复杂用户操作流的 Web 应用程序的测试工具)。
到目前为止,我有一个非常简单的 WPF 应用程序:
<Window x:Class="TestTool.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="600" Width="800">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<WebBrowser Margin="8" Source="http://theapptotest" />
<WebBrowser Margin="8" Source="http://theapptotest" Grid.Column="1" />
</Grid>
</Window>
这不是应用程序的目标布局,但可以测试我的目标是否可行。
正如预期的那样,该应用程序并排显示同一个 Web 应用程序。但是,如果我登录第一个 Web 浏览器控件,则第二个也会登录。我猜这是因为 cookie 是为当前用户共享的。
我查看了WebBrowser class documentation,但没有发现任何有用的信息。
我怎样才能达到我的目标?
是否可以将一个浏览器与其他浏览器“隔离”?
是否可以“模拟”用户控件?就像一些应用程序(主要是网络浏览器)产生不同的进程一样,我可以在不同的帐户下“产生”进程并将其显示在我的主窗口中吗?
请注意,我不必与网页交互。我只想通过更改我的应用程序的一个选项卡(每个用户一个选项卡)来切换用户。
PS:我不坚持使用 Internet Explorer 引擎,如果存在替代浏览器的解决方案,请告诉我
PS:目标应用程序使用两种身份验证机制。用户可以使用 Windows 帐户或基于自定义表单的身份验证进行身份验证。如果需要,我只能使用表单身份验证(如果我可以插入单独的 cookie 容器,则可以完成这项工作)。
[编辑] 我尝试使用其他用户凭据生成 Internet Explorer 的新实例,然后通过将其父窗口设置到我的一个 Windows 窗体主机来附加进程主窗口。然而,这是非常不可靠的(进程经常崩溃,如果任何现有的 IE 实例正在运行,则无法工作,等等。
【问题讨论】:
-
你确定是因为cookies吗?会话 cookie?持久性cookies?这可能会影响解决方案。例如,假设目标站点的身份验证是基于 IP 的(即使这是一个愚蠢的想法),那么解决方案会有所不同。
-
目标应用程序是一个asp.net应用程序(实际上是一个sharepoint应用程序)。它使用标准的 asp.net 身份验证行为(如果我没记错的话,使用一些 cookie,混合持久性和会话 cookie)。但是,我不知道当用户使用 Windows 凭据进行身份验证时这是如何表现的。我只能依靠表单身份验证,所以如果我不得不忘记 Windows 身份验证,这不会是一个问题
-
您是否尝试在此处描述的窗口之一中调用 ClearAuthenticationCache:blogs.msdn.com/b/ieinternals/archive/2010/04/05/…?
-
如何使用 webbrowser 控件发送此命令?而且,我不是它会有所帮助。如前所述,
the ClearAuthenticationCache command clears ALL session cookies, Authentication, and Client Certificates for ALL sites running in the current session。然而,有一些有趣的事情。如果运行“iexplore.exe -nomerge”,生成的 IE 将被隔离。我可以运行两个IE实例,并在两个IE中分别登录。仍然必须找到一种方法将其嵌入我的应用程序中。