随笔 - 21, 文章 - 0, 评论 - 25, 阅读 - 53712
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

浏览器内嵌.NET对象技术架构(一)

Posted on   肖敏  阅读(1047)  评论(2编辑  收藏  举报

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控件库。

wps_clip_image-14372

在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上创建虚拟目录,然后编译整个项目。

wps_clip_image-14392

程序已经完成。使用IE浏览器浏览http://localhost/DotNetHostWebSite/HelloIE.htm。结果如下:

wps_clip_image-14917

配置IIS

然而有些时候该UserControl显示失败,一般是由于IIS配置与.NET安全配置的问题。由于本例子没有做任何涉及安全的操作,因此暂时不用管.NET安全配置。正常的情况下,首先IE会根据object中提供的url发送一个Get请求,把dll下载下来。

wps_clip_image-16437

在两种情况下,这个请求将失败。

l 当前用户没有对该dll文件读取的权限,返回404错误。应保证用户有读取bin目录的权限。

l IIS配置中执行权限设为“脚本和可执行文件”,将返回500错误。应改为“纯脚本”。

wps_clip_image-4428

另外,我们也可以用一个简单的方法来测试,在浏览器地址栏中输入dll的完整地址,回车,如果出现文件下载对话框,表示dll下载没有问题。

wps_clip_image-8129

至此,我们完成了一个最简单的示例。

参考

http://www.cnblogs.com/zgff008/archive/2008/10/28/1321357.html

 

完整源码

 

/Files/xiaomin/DotNetHostWebSite1.rar 

编辑推荐:
· 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,谁才是开发者新宠?
点击右上角即可分享
微信分享提示