知识大全 以 Cassini 来宿主 ASP. NET 客户端
Posted 宿主
篇首语:天下之事常成于困约,而败于奢靡。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 以 Cassini 来宿主 ASP. NET 客户端相关的知识,希望对你有一定的参考价值。
以 Cassini 来宿主 ASP. NET 客户端 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
早在 年 月和 月发行的 MSDN Magazine 中 我讲述了如何构建 ASP 应用程序的客户端环境 也就是运行 ASP 网页的无服务器环境(参见 前沿技术 A Client side Environment for ASP Pages 和 前沿技术 A Client side Environment for ASP Pages art ) 这些专栏的灵感源自下面的情况 假设您的一个客户需要利用一张 CD 来在线发布某些内容 例如 百科全书 黄页或文档集 客户需要在 CD 内包含一个查看器应用程序和一种灵活的软件体系结构来传送内容 另外 除了有处理器最低性能和使用最新版本的 Windows 要求外 客户希望 CD 没有什么特殊的系统要求 从而方便用户使用 这意味着最终的应用程序不应依赖于国内版本 Windows 中包括的 Microsoft Internet 信息服务 (IIS) 或个人 Web 服务器 它应在纯粹的 无服务器的环境下离线运行 在很多情况下 客户有现成的在线内容 Web 站点 在其它情况下 作为项目的一部分 她计划为在线内容创建 Web 站点 在这种情况下 利用 ASP 或 ADO NET 来做这项工作是很明智的选择 因为它们非常灵活并且功能强大 可使您快速 有效地构建查看器应用程序 但是自定义应用中果真能够宿主 ASP 或 ADO NET 吗? 大约三年前当我第一次探讨这个问题时 ADO NET 还没有发布 只是谣传有一种暂定被称为 ASP+ 的东西 这种东西很炫 并且不久即将发行 那时 没有可用来在 IIS 之外以离线方式呈现 ASP 页的工具 更糟糕的是 设计 ASP 并不能轻松地完成这样的宿主操作 因此我提出一种由两部分构成的 ASP 模拟器 一种专用的浏览器以及一个 ASP 服务器模块 构建的浏览器用来截取任何形式的提交与 URL 请求 并且将它们重定向到我自己的 ASP 服务器模块 反过来 ASP 服务器将从磁盘加载资源 解析其内容 从而动态生成 HTML 代码 该浏览器还负责利用与各种响应 请求和服务器 ASP 对象几乎完全相同的编程接口来实例化与初始化伪对象 图 概括了总体体系结构 > 虽然不是理想的解决方案 但它还是满足了客户的期待 并整合成一种较大型的产品 今天仍然能够使很多专业人士使用在线和离线的内容 根据从这些专栏发布起我获得的反馈信息可以判断出 很多开发人员都面临过类似的挑战 几个月后 Microsoft 发布了第一个 beta 版的 ADO NET 我思考着利用该新产品重新访问我的解决方案 ADO NET 的设计是模块化的 所以很适合于宿主在外部应用中 包括 IIS 自身 但是 能够在自定义应用程序中宿主 ADO NET 并不等于构建了一种由 CD 提供的离线 Web 浏览器的现成解决方案 在自定义应用程序中宿主 ADO NET 运行库引擎仅是离线提供动态内容的第一步 如果看看图 中所示的体系结构您就会发现 它基于两个不同的组件 — 一个还接受用户输入的请求处理器和一个生成实际 HTML 代码的 ASP 源处理器 宿主 ADO NET 引擎只是取代了图 中的 ASP 服务器模块 实际上 您需要更多的东西 — 在理想情况下 需要的是一个浏览器和一个嵌入的 Web 服务器 ADO NET Cassini 示例 Web 服务器(参/Projects/Cassini/Download)是一种可以集成 部署解决方案的压缩 本地 Web 服务器 Cassini 采用 ADO NET 宿主 API(System Web Hosting 命名空间)来创建简单的托管 Web 服务器 套接字连接是通过 System Net API 来处理的 可从 Microsoft 获得 Cassini 的源代码 图 显示了基于 Cassini 的离线 Web 应用程序的典型体系结构 您可以看到 整个方案就像是一种基于 Internet 的典型 Web 应用程序 但是更为简单 很显然 Cassini 既不是 IIS 的完全代替物 也不是 Microsoft 版的开放源代码 Web 服务器 Cassini 是本地的 Web 服务器 用来处理对本地文件夹的本地调用 我将回顾一下 Cassini 组件 然后为您说明如何在 CD 上部署 Web 站点 并以此作为结束 > 宿主 ADO NET 运行库 ADO NET 应用程序并不要求将 IIS 作为主机模块 事实上 ADO NET 甚至不要求用 Web 服务器来运行 它公开了一个任何调用方都能使用的尽人皆知的接口 连接并要求内部的 HTTP 管道处理请求 宿主 ADO NET 引擎时 两个类起着重要的作用 — ttpRuntime 和 ApplicationHost 前者是对象的管道的入口点 它更像一条装配链 可以将 aspx 资源的原始 HTTP 请求转变为全新的 HTML 文本 后者使得客户端应用程序宿主 ADO NET 引擎成为可能 ApplicationHost 类负责创建主机进程中的 AppDomain 该进程将处理新应用程序的所有传入请求 Tim Ewald 和 Keith Brown 在他们的文章 HTTP Pipelines: Securely Implement Processing Filtering and Content Redirection with HTTP Pipelines in ADO NET (MSDN 杂志 年 月刊)中全面讲述了 HttpRuntime 类的内部组成 只在应用程序主机收到并预处理请求时 才使用 HttpRuntime 类 应用程序主机将所有请求信息打包到一个请求类中 该请求类派生于 HttpWorkerRequest 抽象类 或更可能派生于其名为 SimpleWorkerRequest 的标准实现类 在准备好使用请求类实例后 主机将处理权移交给 HttpRuntime 调用其 ProcessRequest 静态方法 如下列代码所示 SimpleWorkerRequest req; req = new SimpleWorkerRequest(aspx null Console Out); HttpRuntime ProcessRequest(req); 前面的代码片断显示了启动对 ADO NET 网页进行处理的核心代码 该代码的执行由通过 ApplicationHost 创建的主机类的某个特殊方法来控制 稍后我将回到该主题 现在 绝对可以说 SimpleWorkerRequest 的构造函数根据 ASPX 资源的虚拟路径进行处理 采用一个可选的查询字符串 并采用文本编写器对象作为输出 您可以使用流编写器对象(而不是标准输出控制台)将 HTML 代码保存到磁盘 ApplicationHost 类 主机和 ADO NET HTTP 运行库之间的交互是由名为 ApplicationHost 的特定 Microsoft NET Framework 类来控制的 从 ADO NET HTTP 运行库的角度来看 主机只是调用方 — 即创建了当前的 AppDomain 并且通过调用 ProcessRequest 方法为特定的请求提供服务的模块 ADO NET HTTP 运行库和主机之间的接口都由 ApplicationHost 类的操作来完成 HTTP 运行库全然没有调用方的特性 — 而完全是一个像 IIS 一样的 Web 服务器 一个像 Cassini 一样的的本地 Web 服务器 或者甚至就是一个片刻就可以创建的简单应用程序 ADO NET 可以为调用 HttpRuntimeProcessRequest 并传递正确信息的任何模块提供服务 图 说明了 ADO NET HTTP 运行库和其它部分的关系 > 将 ADO NET 宿主在应用程序中的第一步就是创建新的应用程序主机 这可以通过调用 ApplicationHost 类的 CreateApplicationHost 静态方法来完成 CreateApplicationHost 在调用方进程中创建新的 AppDomain 之所以需要新的 AppDomain 是因为 ADO NET 要依靠一些设置 这些设置只能在 AppDomain 级进行设置 并且某些设置只能在创建 AppDomain 之前进行 这些设置的一部分是投影复制缓存位置的应用程序基本路径和目录 CreateApplicationHost 需要一个虚拟文件夹才能工作 这意味着在第一次访问某个新的虚拟文件夹时就会创建一个新主机并随后创建新的 AppDomain (注意像 Cassini 这样的简单 Web 服务器一次只需要一个虚拟文件夹 但这只是一种特殊情况 ) 在创建主机接口对象后 典型的主机应用程序就开始监听请求 如果主机的工作方式与 Web 服务器的相同 它就要通过端口 开始监听传入的消息 否则它可以是您指定的任何端口 然后将请求打包到请求类中 并传递给 ADO NET 运行库 HttpRuntime ProcessRequest 方法通过对象的管道路由 Request 对象 在通道末端会出现一个新对象 — 就是动态创建类的一个实例 该类是 Page 类的继承类 该实例表示被请求的 aspx 页 要结束该请求 HTTP 运行库要调用 Page 类的ProcessRequest 方法 该页的 ProcessRequest 方法执行 Page 对象的大量任务 每项任务都以事件作为信号 通过利用 runat=server 属性集来为该页的每个组成元素创建服务器控件实例 对该页进行首次初始化 接着 ADO NET 代码加载该页的视图状态 并将它与发送的数据(如文本框和复选框的值)合并 最后 运行库执行客户请求的任何服务器代码(大部分为回发事件) 保存视图状态 并将 HTML 写到输出编写器中 CreateApplicationHost 静态方法是 ApplicationHost 类的唯一成员 它的 C# 原型如下所示 public static object CreateApplicationHost( Type hostType string virtualDir string physicalDir ); 以上代码片断所示的 virtualDir 参数表示所创建的应用域的虚拟目录 而 physicalDir 参数表示此虚拟路径后的文件系统路径 — 被请求的 aspx 文件必须从该磁盘文件夹为该 Web 应用程序进行加载 这些信息都与域相关 并由 ADO NET 工厂对象用来创建 HttpApplication 对象 (global asax) 和网页对象 ( aspx) CreateApplicationHost 的第一个参数是类型对象 它的赋值是应用程序定义的主机类的类型 这种方法返回用户提供的类的实例 该类用来连接主机程序的默认 AppDomain 和新近创建的 AppDomain(参见图 ) 主机类型对象是类似服务器应用程序的核心代码和目标 AppDomain(CreateApplicationHost 先前创建)中 ADO NET HTTP 运行库之间的一种代理 cha138/Article/program/net/201311/13529相关参考
就来说说Asp.net身份验证、授权 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! [本周]如约
知识大全 不用.net和其组件用asp访问webservice
可能大多数的人认为我们需要运行或使用soaptoolkit以访问webservice但是这不是必需的使用微软的xmlparser我们同样可以利用传统的asp页面来访问webservice下面我就展
asp.net中调用Office来制作3D统计图 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 ASP.NET 3.5核心编程之利用页面方法来进行远程调用
ASP.NET3.5核心编程之利用页面方法来进行远程调用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下
知识大全 ASP.NET MVC 4框架揭秘:从Unity来认识IoC(2)
ASP.NETMVC4框架揭秘:从Unity来认识IoC(2) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来
知识大全 ASP.NET MVC 4框架揭秘:从Unity来认识IoC(1)[2]
ASP.NETMVC4框架揭秘:从Unity来认识IoC(1)[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快
知识大全 ASP.NET MVC 4框架揭秘:从Unity来认识IoC(1)[1]
ASP.NETMVC4框架揭秘:从Unity来认识IoC(1)[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快
知识大全 asp.net中使用jquery的ajax来post数据的树控件
我相信大部门的net开发人员还在完全使用框架开发或者有一部分人是和mvc项目都有在做对于传统的如果要有好的体验那么ajax效果当然不可少… &
在项目中我们经常会用到数据缓存也会在项目处理对缓存的维护但是有些时间我们需要人为的来维护这些缓存用下面的代码来实现 将缓存信息绑定到DataGrid上 privatevoidbindCache
知识大全 asp.net 将一个图片以二进制值的形式存入Xml文件中的实例代码
asp.net将一个图片以二进制值的形式存入Xml文件中的实例代码 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一