博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

Posted on 2011-09-18 01:42  肖敏  阅读(1031)  评论(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