1. 概述
对于许多复杂的应用,使用纯Html+javascript的方式难以满足要求。Html5正致力改善这一局面,在在这之前,大家普遍使用ActiveX技术。ActiveX的核心技术依然是COM,浏览器根据Object标签动态创建COM对象并与之交互。我们可以使用VC++与VB开发ActiveX组件。而在.NET时代,我们可以使用.NET支持的语言,利用.NET的优势,更加高效的开发出富客户应用。
如果我们现在要设计一个新的富客户端项目,SilverLight应该是首选方案。但是许多已有的项目不可能马上迁移或者根本不打算迁移到SliverLight。因此,探讨该技术架构依然有现实意义。
本文试图从最简单的例子开始,一步步涵盖所有跟浏览器内嵌.NET对象技术的各方面细节,包括一些有用的工具,并在每一节最后给出完整源代码。
2. Hello IE
我们从一个最简单的例子开始:让IE浏览器显示一个WinForm的控件,控件中显示一行文字“Hello IE”.
创建控件库
首先,创建一个WebApplication与一个Windows控件库。
在Windows控件库中增加一个UserControl,取名为HelloIE,拖入一个标签控件,Text属性设为"Hello IE!".
创建宿主页面
为DotNetHostWebSite项目添加引用,把WindowsFormsControlLibrary引用进来。这样每次编译之后,WindowsFormsControlLibrary.dll便会复制到网站的bin目录中。
然后在DotNetHostWebSite中增加一个htm页面,加入<object>标签如下:
<object id="HelloIE" classid="http:bin/WindowsControlLibrary.dll#WindowsFormsControlLibrary.HelloIE" height="100" width="300"/>
关键属性为classid,语法为:
classid="http:[relativePath/]<winControlAssemblyName>.dll#<ControlNamespace>.<ControlClassName>".
(注:请注意使用相对路径的时候,是不用写双斜杠//的。当然也可以使用绝对路径http://[absolutelyPath],但是实际工作中一般不会使用这种方式,因为开发环境、测试环境跟真实环境往往都会使用不同的url)
最后,我们需要在IIS上创建虚拟目录,然后编译整个项目。
程序已经完成。使用IE浏览器浏览http://localhost/DotNetHostWebSite/HelloIE.htm。结果如下:
配置IIS
然而有些时候该UserControl显示失败,一般是由于IIS配置与.NET安全配置的问题。由于本例子没有做任何涉及安全的操作,因此暂时不用管.NET安全配置。正常的情况下,首先IE会根据object中提供的url发送一个Get请求,把dll下载下来。
在两种情况下,这个请求将失败。
l 当前用户没有对该dll文件读取的权限,返回404错误。应保证用户有读取bin目录的权限。
l IIS配置中执行权限设为“脚本和可执行文件”,将返回500错误。应改为“纯脚本”。
另外,我们也可以用一个简单的方法来测试,在浏览器地址栏中输入dll的完整地址,回车,如果出现文件下载对话框,表示dll下载没有问题。
至此,我们完成了一个最简单的示例。
参考
http://www.cnblogs.com/zgff008/archive/2008/10/28/1321357.html
完整源码