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
完整源码
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?