您的位置:软件 > 开发者网络 > 微软开发专栏 > 技术专题 > 正文
从 .NET 程序集提供图像
[文章信息]
作者:
时间:2003-09-26
出处:Microsoft
责任编辑:方舟
[文章导读]
从程序集提供图像可以避免众多文件散布在磁盘上,简化 Web 服务器的安装和配置
advertisement
热点推荐
· 天极网软件频道改版调查
· 10.29软件精选 精简注册表
· 加速启动Win XP操作系统的谬论
· 如何提高Linux操作系统速度
· 精简注册表高级用法——安全篇
[正文]

上一页  1 2 3 4 5 6  下一页

  从自定义处理程序提供图像

  如果您以前从未接触过处理程序,我将在这里大概介绍一下。处理程序是用于实现 IHttpHandler 接口的对象。当包含给定文件扩展名的请求通过 ASP.NET 管道时,将为特定动词(如 POST、GET 等)或一组动词调用处理程序。

  通常,ASP.NET 会检查请求的文件扩展名,并将请求传送给与该扩展名相关联的处理程序。

  了解了这些知识,我们就可以创建处理程序,将其与自己的文件扩展名相关联(这样,ASP.NET 就会知道我们要调用的是处理程序,而不是其他内容),并且以该方式提供图像。

  下面的代码显示的是一个简单的处理程序,该处理程序使用了上面声明的 RenderImage 函数。

public class ManifestResourceHandler : IHttpHandler
{
/// <summary>
/// 处理图像请求
/// </summary>
/// <param name="context">The current HTTP context</param>
void IHttpHandler.ProcessRequest ( System.Web.HttpContext context )
{
// 从请求中获取程序集名称和资源名称
string assembly = context.Request.QueryString["assem"] ;
string image = context.Request .QueryString["image"] ;

// 然后加载图像并返回给调用方
ManifestImageLoader.RenderImage ( assembly , image ) ;
}

/// <summary>
/// 此处理程序可以重复使用,不需要循环
/// </summary>
bool IHttpHandler.IsReusable
{
get { return true; }
}
}

  这段代码与上面为 ASPX 页面显示的代码非常类似 - 从传来的 URL 读取参数,然后将这些参数传递到 RenderImage 函数。

  现在,要想使用处理程序来提供图像,我们需要使用不同的 URL。在此实例中,需要创建一个虚构的文件扩展名(即在 IIS 中不存在的扩展名),这样,图像请求就可以传送给正确的处理程序。在此示例中我将使用扩展名“mfr”(表示“清单资源”)。图像请求现在看起来有点像下面的描述。

<img src=".mfr?assem=MS.Resources&image=winxp.gif" />

  注意,我还未指定资源的路径,只是指定了文件扩展名 .mfr。

  使用处理程序的主要好处是可以为所有请求调用该程序,而不用考虑它们的路径。

  要使处理程序能够工作还需要另外两个步骤。首先,需要修改 web.config,以指定新的处理程序:

<configuration>
<system.web>
...
<httpHandlers>
<add verb="GET" path="*.mfr" type="ImageServer.ManifestResourceHandler, ImageServer" />
</httpHandlers>
</system.web>
</configuration>


  上述配置文件中的类型定义了实现处理程序的类型和程序集。注意,动词属性区分大小写,因此应设置为 GET 而不是其他的大小写形式。程序集本身需要驻留在您 Web 站点的二进制目录中,或安装在全局程序集缓存 (GAC) 中。

  其次,您需要在 IIS 管理中编辑 Web 服务器的配置。单击您要更改的 Web 站点的 Properties(属性),选择 Home Directory(主目录)选项卡,然后单击 Configuration(配置)。将显示与以下窗口类似的窗口。


图 1:配置 IIS

  单击 Add(添加)按钮,为 .mfr 文件类型创建条目。每个扩展名都会被映射到处理资源请求的 ISAPI 过滤器。对于 ASP.NET,为 aspnet_isapi.dll 过滤器。此库驻留在磁盘中已安装的 Framework 下,因此要设置 .mfr 扩展名的所有请求以通过相应的 ISAPI dll,需要进行如下设置:

版本  路径
1.0  C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705\aspnet_isapi.dll
1.1  C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll

  其余的设置显示在以下图像中。请注意,必须清除 Verify that file exists(检查文件是否存在)复选框,否则永远不会调用处理程序(因为磁盘中不存在实际的 .mfr 文件)。


图 2:为扩展名设置属性

  现在应该可以运行处理程序了。在浏览器中键入映射到程序集中的资源的 URL:



图 3:从程序集提供图像

  如果您接收到的不是请求的图像,而是一个异常(如“‘null’不是‘stream’的有效值”),那么您可能遇到了目前我们还没有在代码中进行处理的一些小问题 - 如果图像有错误怎么办? 我们将在下一节对这个问题及其他一些小问题进行纠正。


上一页  1 2 3 4 5 6  下一页

·"WAP天极之IT新闻资讯,50万元等你拿"    ·天极WAP之游戏狂图,50万元等你下载

天极社区邀请您:写博客日记  上传相片   论坛聊天  订阅电子杂志  推荐网摘   免费图铃工具
笔名:   请您注意:

 遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

 天极网拥有管理笔名和留言的一切权利。
评论:
 

发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容阅读排行榜
  • VS.NET中构建数据库应用程序
  • .NET后台智能传输服务实现自动更新(上)
  • 探秘Visual Studio.Net 2003
  • 解析.NET框架下的数据类型转化技术
  • 主板超频特色技术ASUS华硕篇
  • 十大年底网游期待大作
  • 竞技游戏美女汉堡MM访谈
  • ATI显卡驱动下载回顾专题
  • 裸露的飞天舞 完全裸机酷图
  • CIG 2004:重庆赛区地点更改通知
  • 10.29软件精选 精简注册表
  • 且看江湖谁主沉浮 金庸群侠魔兽版
  • Advertisement