小乔 发表于 2015-8-14 08:38:00

如何解决Silverlight集成到IIS无法显示页面问题

当我们使用Http方式新建站点时,IIS的默认配置无法显示Silverlight。


主要原因是因为浏览器无法下载.xap文件,因为IIS的默认配置不支持.xap的mime-type。
可以尝试手动下载.xap文件,在浏览器中输入
http://<hostName>/<projectName>/<silverlightLinkFolder>/ClientBin/<silverlightProjectName>.xap
例如:http://localhost/WebSample/ClientBin/SilverlightSample.xap,
我发现会出现“无法找到该页”页面,无法下载xap文件

解决方法:
1、将.xap加入IIS mime-type配置中;
2、将.xap文件重命名为.zip文件;
3、使用 IHttpHandler 接口输出文件;

方法1:个人认为支持某些功能修改IIS配置是一个不好习惯,如果在使用远程虚拟空间时,将变得很被动。
方法2:在调试时比较麻烦,因为每次生成项目时需要重命名。
方法3:
首先实现IHttpHandler

using System.IO;

/**//// <summary>
/// Summary description for SilverlightXapHandler
/// </summary>
public class SilverlightXapHandler : IHttpHandler
{
    public SilverlightXapHandler()
    {
    }

    protected String XapFile
    {
      get { return @"ClientBin\SilverlightSample.xap"; }
    }


    IHttpHandler Members#region IHttpHandler Members

    public bool IsReusable
    {
      get { return true; }
    }

    public void ProcessRequest(HttpContext context)
    {
      // 文件真实路路径
      String filePath = context.Request.PhysicalApplicationPath + XapFile;
      FileInfo file = new FileInfo(filePath);
      if (file.Exists)
      {
            // 当.xap文件比较大时,不要一次性读入到内存
            byte[] buf = new byte;
            using (FileStream fs = file.OpenRead())
            {
                fs.Read(buf, 0, buf.Length);
            }
            context.Response.AddHeader("Content-Disposition", "attachment; filename=SilverlightSample.xap");
            context.Response.BinaryWrite(buf);
      }
      else
      {
            // 没有找到文件
            context.Response.Status = "404 Not Found ";
      }

    }

    #endregion
}
在web.config配置文件 <httpHandlers> 节点加入
<add verb="*" path="ClientBin/SilverlightSample.aspx" type="SilverlightXapHandler"/>

修改Silverlight显示页面连接




页: [1]
查看完整版本: 如何解决Silverlight集成到IIS无法显示页面问题