在IE浏览器中使用.NET Windows窗体控件

一.引言   
在过去, Web 程序员经常在他们的 Web 程序中使用 ActiveX 控件来实现一些胖客户端才具有的功能。不过现在开发者可以很容易的通过 Microsoft.NET Framework 来简洁和安全的建立对象,并且方便的在 IE 浏览器中切入使用。通过在 IE 浏览器中创建 Windows 窗体控件,开发者可以实现丰富的 web 客户端。在这篇文章中,我们将会知道怎样创建 Windows 窗体控件并且在 IE 中使用。在浏览器中使用窗体控件过程中,我们会演示怎样通过窗体控件来提供丰富的 web 客户端显示,而窗体控件用来调用远程 Web service 获取数据。与此同时,我们也会知道怎样利用 .NET 安全模型来为我们的窗体控件提供一个安全的运行环境。 
 
如果你有过用 Java 开发 Web 程序的经验,那你会很熟悉 Java applets 。它是一个运行在浏览器中的一个小程序。当浏览器打开包含有 Applet 标签的 HTML 文档时, Java applets 就会运行。 Windows 窗体在 web 页里的工作方式同 Java applets 很相似。在这个实现中,你创建窗体控件,并为他加上丰富的 Windows 窗体控件样式,接着切入到 Web 页面中。在浏览器加载该 Web 页面的时候, Windows 控件所包含的代码也会被执行。在局域网或者扩展的网络程序中这个将会是很有用的。比如想开发一个企业使用的具有胖客户端特性的基与 web 的程序。
   .NET 的一个重要特征就是跟 IE 紧密结合。比如,我们可以在 IE 中使用 Windows 窗体控件,而不需要通知用户需要加另外的东西。这个不需要注册什么 .NET CLR 就会提供代码安全访问的能力。
  当你创建 Windows 窗体控件,你会有窗体类层次提供的特征。比如,你可以使用 Windows 窗体控件验证技术来验证输入数据的准确性。同样的,你甚至可以在你的窗体控件中调用 Web Service 。通过这些技术使用,你可以创建基与 .NET 平台的丰富的、健壮的、动态应用程序。
备注:按照原文重写了代码,把载图替换成了中文,运行环境:操作系统windows2003,.NET Framework 1.1.这里讲几点:调试过程中打开浏览器输入完整地址。如果以文件方式打开将不会显示窗体控件;另外对于进程的调试,可以是单个源文件。不过我运行的是Debug版本下生成的组件,不是Release的,有兴趣读者可以试试。
  二.执行   
在这节,我们就会明白怎样创建 Windows 窗体控件并在 IE 中使用。下面列出了五个步骤来完成这一过程。
           1 .创建 Windows 窗体控件  
         2 .创建一个带有 object 标签的 HTML 文档,该标签用来标识 Windows 控件  
         3 .配置控件的虚拟路径  
         4 .设置代码访问权限  
         5 .运行控件  
接下来让我们来看看上面的各个步骤。 
 
1 .创建一个 windows 窗体控件   
在这一步中,我们创建一个简单的Windows窗体控件。控件实现的功能是显示”Hello World”给用户。我们先来建立一个Windows 控件库项目取名为HelloWorldControl,修改默认的用户控件为HelloWorldCtl。接着在控件中加入一个Label,取名为lblDisplayMessage,同时增加了一个按钮btnClick。当用户点击按钮时,将会执行下面的代码用来显示消息给用户。
private void btnClick_Click(object sender, System.EventArgs e)
{
     this.lblDisplayMessage.Text = "Hello World";
}
接着就是编译他生成一个Assembly。
 
2 .创建 HTML
在这一步中,我们将创建一个 HTML 文档并在里面插入 object 标签。整个文档看起来如下:  
<html>
 <body>
  <p>Hello World Control
   <OBJECT id="HelloWorldControl1" height="300" width="300" classid="http:HelloWorldControl.dll#HelloWorldControl.HelloWorldCtl"
    VIEWASTEXT>
   </OBJECT>
   <br>
  </p>
 </body>
</html>
在这个标签的 classid 属性中,我们指定第一步创建的那个组件的路径以及组件完整限定名。整个完整名称包括命名空间和整个类名。我们可以在上面的代码中清楚的看到组件名和限定名用 # 分割。这两部分参数组合在一起用来标识控件的唯一性。当然可以通过取名唯一 id HelloWorldControl1 来编写客户端脚本。 
 
3 .配置虚拟路径  
有了 HTML 页面,现在来建立一个 HelloWorldControlHost 的虚拟目录,实际目录在 D:/My Programs/HellpWorldHost ,该目录包含了 HelloWorldControl.dll Hellpworld.htm 文件。当设置虚拟目录的时候,需要注意的是设置执行权限为“纯脚本”。如果设置成“脚本和可执行脚本”的权限。那控件可能不会正常工作( 我在IIS6下设置成“脚本和可执行脚本”,不正常 )。你可以打开虚拟目录的属性来确认设置,设置窗口如下:

  4 .设置代码访问权限  
如果这个 web 在局域网中访问,他会正常工作。如果该 Web 是通过 Internet 来访问,那你需要设置 internet Explorer ,修改安全属性以允许他运行。你可以把主页加入到受信任的站点。如果需要设置可以通过 IE 的工具菜单― >Internet 选项- > 安全- > 受信任的站点,点击上面的站点按钮把你的网站加入其中。接下去,当你打开浏览器查看,就会看到正确执行。 
 
5 .运行控件 
 
要运行这个控件,我们在浏览器中查看包含了控件的那个 Html 页面。假如你在页面上点击这个按钮,那么控件就会显示“ Hellp World ”信息,执行页面如下:

  在这个例子中,我们实现了怎样创建件一个 Windows 窗体控件然后在 IE 浏览器中显示。在下一节中我们来实现在客户端浏览器上通过窗体控件来访问 Web Service
 
三.通过windows窗体控件访问Web Service
 
窗体控件一个重要优点就是你可以通过它在客户端实现丰富的用户信息。比如说,你可以通过窗体控件对 Web 服务的访问从而在 IE 中显示而不需要重新刷新该页面。为了演示这点,我们先来创建一个 Web 服务,接着再来演示怎样通过窗体控件调用 Web 服务。
创建 Web service
我们创建一个 Visual C# Asp.net web service 新项目,名字取为 AuthorsWebService
建立以后,我们修改服务类名称为 AuthorsService ,同时在类里面增加一个 GetAuthors 方法到里面,该方法的代码如下:
[WebMethod]
public DataSet GetAuthors()
{
     string connString = System.Configuration.ConfigurationSettings.AppSettings["connectionString"];
     SqlConnection sqlConn = new SqlConnection(connString);
     DataSet dstAuthors = new DataSet("Authors");           
     SqlDataAdapter adapter = new SqlDataAdapter("Select * from Authors",sqlConn);      
     adapter.Fill(dstAuthors,"Author");       
     sqlConn.Close();
     sqlConn.Dispose();
     return dstAuthors;      
}
上面方法的代码比较简单,我们把数据库连接字符串储存到了Web.config文件的appSettings节点上,如下:
<appSettings>
         <add key="connectionString" value="server=localhost;uid=sa;pwd=thiru;database=Pubs"></add>
</appSettings>
 
上面代码中,
我们创建了一个SqlConnnection实例,同时把上面的连接字符串作为参数传入。接着创建一个SqlDataAdapter对象,传入两个参数――查询字符串和SqlConnnection实例。调用SqlDataAdapter实例的Fill方法来执行数据库查询并把结果填充到DataSet。现在我们完成了Web服务的创建,接下去来建立一个他的一个客户端调用。
创建windows窗体控件作为Web服务客户端
在这里,我们是想用一个窗体控件来调用Web Service,因此新建一个Visual C#窗体控件项目取名 AuthorsWebServiceClientControl:
完成后,修改默认用户控件名称为 AuthorsControl. 。我们在上面添加了一个 DataGrid 控件取名 GridAuthors 同时添加一个按钮取名 BtnClick 。注册按钮的点击事件,在事件处理函数中,将会调用 WebService 。在这之前我们需要添加项目的 Web 引用,输入刚才创建的 Web 服务地址。编辑器会生成该服务的代理,添加 Web 服务引用如下:
服务代理创建以后,我们在按钮事件中添加代码:
private void BtnClick_Click(object sender, System.EventArgs e)
{
     this.Cursor = Cursors.WaitCursor;
     AuthorsWebServiceProxy.AuthorsService authorsSvc = new
         AuthorsWebServiceProxy.AuthorsService();
     this.GridAuthors.DataSource = authorsSvc.GetAuthors();
     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 就是一个很好的例子。
最后,我希望你会发现这篇文章对你有所帮助,同时谢谢你的阅读。  
 
About the Author 
 
Thiru has almost six years of experience in architecting, designing, developing and implementing applications using Object Oriented Application development methodologies. He also possesses a thorough understanding of software life cycle (design, development and testing). 
 
He is an expert with ASP.NET, .NET Framework, Visual C#.NET, Visual Basic.NET, ADO.NET, XML Web Services and .NET Remoting and holds MCAD for .NET, MCSD and MCP certifications. 
 
Thiru has authored numerous books and articles. He can be reached at thiruthangarathinam@yahoo.com.

 

MyTest:
<object id="my" classid="http:UserControl.dll#UserControl.DigitalClock" width="300" height="280">
</object>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值