65.9K
CodeProject 正在变化。 阅读更多。
Home

通过 HttpHandler 暴露 Flash 内容

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.11/5 (2投票s)

2013 年 10 月 11 日

CPOL

2分钟阅读

viewsIcon

5916

我们的应用程序是根据用户选择的某些标准向用户呈现实时数据和图表的应用程序。图表和模型是

我们的应用程序是根据用户选择的某些标准向用户呈现实时数据和图表的应用程序。图表和模型以 Adobe Flex 创建的 Flash 组件(.swf 文件)的形式显示给用户。

 

由于我们是 Flash (.swf) 组件的开发者,因此一切运行得都很好。使用 object 标签将 Flash 组件添加到 aspx 文件中很容易

 

<object id="FlashID" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="600"                height="200">                <param name="movie" value="StylingComp.swf" />                <param name="quality" value="high" />                <param name="wmode" value="opaque" />                <param name="swfversion" value="7.0.70.0" />

</object>

 

当组织中的其他一些应用程序想要使用我们自定义的 Flash 组件在其应用程序中显示时,情况发生了变化。共享 .swf 文件没有意义,因为每次我们对组件进行任何更改时,都必须与所有其他应用程序共享最新的 .swf 文件。

 

经过一些研究,我们决定创建自定义的 HttpHandler 来以 .swf 格式显示内容。

 

创建自定义 HttpHandler 非常简单。

1.      右键单击 Web 项目/网站

2.      点击“添加新项”

3.      选择“通用 HttpHandler”

 

以下代码读取 .swf 文件并将其写入 Response 流。

这里需要注意的一点是,将 ContentType 设置为"video/x-flv"

using System;

using System.Data;using System.Web;using System.Collections;using System.Web.Services;using System.Web.Services.Protocols; namespace TestWebApplication{    /// <summary>    /// $codebehindclassname$ 的摘要说明    /// </summary>    [WebService(Namespace = "http://tempuri.org/")]    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]    public class FlashHandler : IHttpHandler    {         public void ProcessRequest(HttpContext context)        {                        context.Response.ContentType = "video/x-flv";            byte[] content=null;            using (System.IO.FileStream fso = new System.IO.FileStream(context.Server.MapPath("StylingComp.swf"), System.IO.FileMode.Open))            {                content = new byte[fso.Length];                fso.Read(content,0, Convert.ToInt32(fso.Length));            }            context.Response.BinaryWrite(content);            context.Response.Flush();            context.Response.Close();        }         public bool IsReusable        {            get            {                return false;            }        }    }

}

 

这只是一个起点,您可以修改ProcessRequest方法

·         检查用户是否订阅了该内容

·         根据 Request 集合向用户发送内容context.Request[..]。

context 和用于执行 asp.net 中所有可能任务的。

 

接下来,要在 aspx 页面中使用这些内容,您只需对 object 标签进行一些小的更改。

 

假设应用程序名称为“DemoFlashHandler”,托管在本地 IIS 上,我们需要将 object 标签的值更改为“https:///DemoFlashHandler/FlashHandler.ashx”。

 

 

<object id="FlashID" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="600"                height="200">                <param name="movie" value="FlashHandler.ashx" />                <param name="quality" value="high" />                <param name="wmode" value="opaque" />                <param name="swfversion" value="7.0.70.0" />

</object>

 

现在,任何应用程序都可以通过这个简单的 URL 访问您的 .swf 组件

 

© . All rights reserved.