HTML网页和虚拟目录的创建
在这一步骤中,我们将创建托管AuthorsWebServiceClientControl控件的HTML网页,HTML网页的代码如下所示:
在创建HTML网页后,我们还需要创建一个用来托管HTML网页和控件的虚拟目录。创建虚拟目录后,我们就可以将HTML网页和控件拷贝到被映射到虚拟目录的物理目录中。现在,我们就可以通过浏览HTML网页对控件进行测试了,在HTML网页中,我们会看到是窗体控件一部分的命令控件。如果点击命令按钮,它就会从客户机上的浏览器调用Web服务,并在DataGrid中显示Web服务的结果。HTML网页的输出如下所示:
调试Windows Forms控件
为了调试该控件,我们需要完成下面的步骤:
·打开浏览器,请求浏览上面创建的HTML网页。
·打开Visual Studio.NET,从菜单中选择“工具”->“调试进程”,显示下面的对话框:
·在进程对话框,选择IEXPLORE.EXE,点击“附加”按钮。点击“附加”按钮时,会出现下图所示的对话框,它会提醒你选择要调试的程序类型。在该对话框中,确保选择了清单中的“公共语言运行库”选项。
·点击上面对话框中的“OK”按钮将使我们重新返回到进程对话框,这次,我们只需点击“关闭”按钮即可。
·从“文件”->“打开”->“文件”菜单中打开用户控件文件AuthorsWebServiceClientControl.cs,并在命令按钮的Click事件中设置断点。
·返回到浏览器并点击命令按钮,程序会自动运行到刚才在控件中设置的断点处,我们就可以使用Visual Studio .NET的所有功能调试代码。
代码访问权限和Windows Forms控件
象我们在上面讨论的那样,当控件在IE中执行时,它会利用了.NET运行时间库提供的代码访问权限。为了理解在IE中运行的Windows Forms控件是如何与由.NET运行时间库提供的代码访问安全机制协调运行的,我们在Authors窗体控件中添加几行代码,并创建新的事件日志源。经过修改后,控件的load事件如下所示:
在上面的几行代码中,我们检查名为TestSource的EventLog源是否存在,如果不存在,则创建一个,否则我们删除现有的事件源,再创建一个新的事件源。也许你已经想到,执行这样的操作需要更高的权限,从互联网上下载的控件不应当具有执行这种操作的权限。为了确保这一点,我们将控件的输出拷贝到虚拟目录中。在完成这一操作后,如果用浏览器浏览托管有控件的HTML网页,我们会看到下面的对话框:
上面的对话框清楚地表明,控件中的代码受到了.NET时间运行库中代码访问安全机制的限制。
小结
在在IE中使用Windows Forms前,我们需要注意它的优点和限制。它的主要优点有:
·通过Web实现动态丰富用户体验的能力。
·客户端编译代码的自动缓冲。
·与.NET代码访问安全机制的无缝集成,使我们能够从客户端利用.NET安全模型
·胜过Java applets的性能。
限制包括:
·要求客户端安装有Windows操作系统。
·只有IE 6.0提供对这类托管方式的支持
·要求客户机上安装.NET运行时间库
·要求服务器端至少安装Windows 2000、IIS 5.0或者以上版本软件。
由于会受到上面的种种限制,检测客户机是否具有这种能力是必要的。例如,由于在IE中托管窗体控件需要在客户机上安装有.NET运行时间库,我们就可以编写检查客户机是否安装有.NET运行时间库的代码。我们可以通过检查Request.Browser.ClrVersion属性的值来完成这一操作,如果安装了,则会返回版本号,否则会返回0.0。
结论
在本篇文章中,我们学习了如何在IE中托管Windows Forms控件以及如何调试控件,我们还学习了如何利用.NET代码访问安全机制配置在浏览器中运行时控件能够执行的操作。
尽管这一技术要求特定的平台,但它仍然不失为一种有前途的技术,尤其是考虑到.NET Framework将成为未来版本的Windows的有机组成部分。
在这一步骤中,我们将创建托管AuthorsWebServiceClientControl控件的HTML网页,HTML网页的代码如下所示:
<html> <body> <p>Authors Display Control<br> <br></body> <object id="AuthorsControl1" classid="http:AuthorsWebServiceClientControl.dll#AuthorsWebServiceClientControl.AuthorsControl" height="500" width="500" VIEWASTEXT> </object> <br><br> </html> |
在创建HTML网页后,我们还需要创建一个用来托管HTML网页和控件的虚拟目录。创建虚拟目录后,我们就可以将HTML网页和控件拷贝到被映射到虚拟目录的物理目录中。现在,我们就可以通过浏览HTML网页对控件进行测试了,在HTML网页中,我们会看到是窗体控件一部分的命令控件。如果点击命令按钮,它就会从客户机上的浏览器调用Web服务,并在DataGrid中显示Web服务的结果。HTML网页的输出如下所示:
调试Windows Forms控件
为了调试该控件,我们需要完成下面的步骤:
·打开浏览器,请求浏览上面创建的HTML网页。
·打开Visual Studio.NET,从菜单中选择“工具”->“调试进程”,显示下面的对话框:
·在进程对话框,选择IEXPLORE.EXE,点击“附加”按钮。点击“附加”按钮时,会出现下图所示的对话框,它会提醒你选择要调试的程序类型。在该对话框中,确保选择了清单中的“公共语言运行库”选项。
·点击上面对话框中的“OK”按钮将使我们重新返回到进程对话框,这次,我们只需点击“关闭”按钮即可。
·从“文件”->“打开”->“文件”菜单中打开用户控件文件AuthorsWebServiceClientControl.cs,并在命令按钮的Click事件中设置断点。
·返回到浏览器并点击命令按钮,程序会自动运行到刚才在控件中设置的断点处,我们就可以使用Visual Studio .NET的所有功能调试代码。
代码访问权限和Windows Forms控件
象我们在上面讨论的那样,当控件在IE中执行时,它会利用了.NET运行时间库提供的代码访问权限。为了理解在IE中运行的Windows Forms控件是如何与由.NET运行时间库提供的代码访问安全机制协调运行的,我们在Authors窗体控件中添加几行代码,并创建新的事件日志源。经过修改后,控件的load事件如下所示:
private void AuthorsControl_Load(object sender, System.EventArgs e) { if (!EventLog.SourceExists("TestSource")) EventLog.CreateEventSource("TestSource", "TestLog"); else { EventLog.DeleteEventSource("TestSource"); EventLog.CreateEventSource("TestSource", "TestLog"); } } } |
在上面的几行代码中,我们检查名为TestSource的EventLog源是否存在,如果不存在,则创建一个,否则我们删除现有的事件源,再创建一个新的事件源。也许你已经想到,执行这样的操作需要更高的权限,从互联网上下载的控件不应当具有执行这种操作的权限。为了确保这一点,我们将控件的输出拷贝到虚拟目录中。在完成这一操作后,如果用浏览器浏览托管有控件的HTML网页,我们会看到下面的对话框:
上面的对话框清楚地表明,控件中的代码受到了.NET时间运行库中代码访问安全机制的限制。
小结
在在IE中使用Windows Forms前,我们需要注意它的优点和限制。它的主要优点有:
·通过Web实现动态丰富用户体验的能力。
·客户端编译代码的自动缓冲。
·与.NET代码访问安全机制的无缝集成,使我们能够从客户端利用.NET安全模型
·胜过Java applets的性能。
限制包括:
·要求客户端安装有Windows操作系统。
·只有IE 6.0提供对这类托管方式的支持
·要求客户机上安装.NET运行时间库
·要求服务器端至少安装Windows 2000、IIS 5.0或者以上版本软件。
由于会受到上面的种种限制,检测客户机是否具有这种能力是必要的。例如,由于在IE中托管窗体控件需要在客户机上安装有.NET运行时间库,我们就可以编写检查客户机是否安装有.NET运行时间库的代码。我们可以通过检查Request.Browser.ClrVersion属性的值来完成这一操作,如果安装了,则会返回版本号,否则会返回0.0。
结论
在本篇文章中,我们学习了如何在IE中托管Windows Forms控件以及如何调试控件,我们还学习了如何利用.NET代码访问安全机制配置在浏览器中运行时控件能够执行的操作。
尽管这一技术要求特定的平台,但它仍然不失为一种有前途的技术,尤其是考虑到.NET Framework将成为未来版本的Windows的有机组成部分。