this.Cursor = Cursors.Default;
}
在上面代码中,我们创建了web服务代理的一个实例,并调用GetAuthors方法把返回的数据集赋值给GridAuthors的DataSource属性。接着编译这个窗体控件,然后配置虚拟目录。
创建Html页面和建立虚拟路径
在这一步中,我们通过创建一个Html页面来使用上面创建的那个AuthorsWebServiceClientControl。下面是他的代码:
<html>
<body>
<p>Authors Display Control<br><br>
<object id="AuthorsControl1"
classid="http:AuthorsWebServiceClientControl.dll#AuthorsWebServiceClientControl.AuthorsControl"
height="500" width="500" VIEWASTEXT>   
</object>
<br><br>
</body>
</html>
现在我们需要创建一个虚拟目录使该控件能正常工作,并把AuthorsDisplay.htm和AuthorsWebServiceClientControl.dll放在一起。打开该浏览器输入地址,你就会看到一个按钮和一个空的DataGrid,如果你点击该命令按钮,控件就会调用Web服务同时把结果写到了DataGrid中。页面结果如下所示。

在下一节中我们看看对进程的调试。
调试Windows窗体控件
 
要调试窗体控件,你需要按照下面步骤进行。
         1.打开浏览器并请求包含窗体控件的那个Html页面。
         2.打开visual Studio.Net同时选择工具->调试进程就会显示下面的对话框。
 
 
在这个进程对话框中,选择IEXPLORE.EXE 点击附加按钮。当你点击附加按钮时会跳出一个对话框提示你选择要调试的程序类型。我们选择了Common Language Runtime 和Script两项,如下图:
 

确定关闭上面的窗口和进程窗口。
         通过Vs.net的文件菜单打开用户控件文件 AuthorsWebServiceClient.cs,在源代码中设置断点。这样一旦你设置断点,你就可以调试该控件了,如下图所示。
 

Windows窗体代码访问权限
就象我们以前讨论的一样。当窗体控件在IE中执行时,他使用由.NET运行时提供的权限。要弄清楚控件怎样使用由.NET运行时提供的代码访问安全来在IE中运行,让我们回到前面,在窗体控件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");
     }   
}
在上面的代码中我们判断web服务器上是否存在”TestLog”的日志源,如果不存在我们就创建他,如果存在就删除重建。就象你预料的一样,执行这些代码需要有更多的权限,所以上面的代码通过Internet该用户控件将不会正常工作,你将会看到如下的提示窗口。
 

通过上面窗口我们可以清楚的看到你的访问被.NET运行时所限制。
 
在IE中使用窗体控件时,你需要意识到他的优点和局限。主要的优点包括:
1.通过Web实现丰富的动态界面。
2.无缝结合.NET的代码安全策略。
3.优于Java applets的表现。
限制包括:
1.客户端需要是Windows操作系统
2.需要IE6.0的支持
3.客户端需要安装.NET运行时环境
4.服务器端需要是Window2000和IIS5.0或者更高版本
由于上面的限制,对客户端和服务器端数据的传输这也许也是有利的。比如说由于让Windows窗体控件在客户端IE中使用需要客户端安装有.NET runtime,我们可以写一些代码来判断客户机是否安装有.NET runtime,通过这一特征我们可以获得版本号,否则会得到0.0。
 
结论
在这篇文章中,我们讨论了怎样在IE中使用浏览窗体控件以及在进程中进行调试。同时也讲到了在IE中的.NET代码访问安全控制。
虽然这项技术的实现需要客户端安装.NET运行时,不过我们可以相信在以后的Windows操作系统中将会集成.NET framework,windows2003就是一个很好的例子。
最后,我希望你会发现这篇文章对你有所帮助,同时谢谢你的阅读。