ASP.NET 客户端到服务器的通信

2023-12-19

您能帮助我了解 ASP.NET 中从浏览器到客户端进行通信的所有不同方式吗?我已将其设为社区 wiki,因此请随意编辑我的帖子以改进它。具体来说,我试图通过列出每种方法的工作原理来了解在哪种情况下使用每种方法。

我对 UpdatePanel 与 CallBack(使用 ViewState)有点模糊:我知道 UpdatePanel 总是返回 HTML,而 CallBack 可以返回 JSON。还有其他主要区别吗?

...以及 CallBack(无 ViewState)与 WebMethod。 CallBack 经历大部分页面生命周期,而 WebMethod 则不然。还有其他主要区别吗?

IHttpHandler http://msdn.microsoft.com/en-us/library/system.web.ihttphandler.aspx

  • Custom handler for anything (page, image, etc.)
    • 只做你告诉它做的事(轻服务器处理、轻流量)
    • Page http://msdn.microsoft.com/en-us/library/system.web.ui.page.aspx是一个实现IHttpHandler http://msdn.microsoft.com/en-us/library/system.web.ihttphandler.aspx
    • 如果你不需要什么Page http://msdn.microsoft.com/en-us/library/system.web.ui.page.aspx提供、创建自定义IHttpHandler http://msdn.microsoft.com/en-us/library/system.web.ihttphandler.aspx
    • 如果您正在使用Page http://msdn.microsoft.com/en-us/library/system.web.ui.page.aspx但压倒一切Render() http://msdn.microsoft.com/en-us/library/20b8wk8d%28v=VS.100%29.aspx并且不生成 HTML,您可能可以使用自定义来完成IHttpHandler http://msdn.microsoft.com/en-us/library/system.web.ihttphandler.aspx(例如写入图像等二进制数据)
  • By default can use the .axd or .ashx file extensions -- both are functionally similar
    • .ashx 没有任何内置端点,因此按照惯例它是首选

定期回发(系统.Web.UI.页面 http://msdn.microsoft.com/en-us/library/system.web.ui.page.aspx : IHttpHandler http://msdn.microsoft.com/en-us/library/system.web.ihttphandler.aspx)

  • Inherits Page http://msdn.microsoft.com/en-us/library/system.web.ui.page.aspx
    • 完整回发,包括视图状态 http://msdn.microsoft.com/en-us/library/ms972976.aspx和 HTML 控制值(交通繁忙)
    • Full Page http://msdn.microsoft.com/en-us/library/system.web.ui.page.aspx 生命周期 http://msdn.microsoft.com/en-us/library/ms178472.aspx (繁重的服务器处理)
  • 无需 JavaScript
  • 由于所有内容都已在浏览器中重新加载,因此网页闪烁/滚动
  • 返回整页 HTML (交通繁忙)

更新面板 http://msdn.microsoft.com/en-us/library/system.web.ui.updatepanel.aspx (系统.Web.UI.控制 http://msdn.microsoft.com/en-us/library/system.web.ui.control.aspx)

  • Control inside Page http://msdn.microsoft.com/en-us/library/system.web.ui.page.aspx
    • 完整回发,包括视图状态 http://msdn.microsoft.com/en-us/library/ms972976.aspx和 HTML 控制值(交通繁忙)
    • Full Page http://msdn.microsoft.com/en-us/library/system.web.ui.page.aspx 生命周期 http://msdn.microsoft.com/en-us/library/ms178472.aspx (繁重的服务器处理)
    • 外部控制更新面板 http://msdn.microsoft.com/en-us/library/system.web.ui.updatepanel.aspx进行渲染(NullTextWriter)
  • Must use ScriptManager http://msdn.microsoft.com/en-us/library/system.web.ui.scriptmanager.aspx
    • 如果没有客户端 JavaScript,它可以回退到没有 JavaScript 的常规 PostBack(?)
  • 没有闪烁/滚动,因为它是异步调用,除非它回退到常规回发。
  • 可与母版页和用户控件一起使用
  • 具有对进度条的内置支持
  • 返回内部控件的 HTML更新面板 http://msdn.microsoft.com/en-us/library/system.web.ui.updatepanel.aspx (中等流量)

客户端回调 http://msdn.microsoft.com/en-us/library/ms178208.aspx (Page http://msdn.microsoft.com/en-us/library/system.web.ui.page.aspx, System.Web.UI.ICallbackEventHandler http://msdn.microsoft.com/en-us/library/system.web.ui.icallbackeventhandler.aspx)

  • Inherits Page http://msdn.microsoft.com/en-us/library/system.web.ui.page.aspx
    • Most of Page http://msdn.microsoft.com/en-us/library/system.web.ui.page.aspx 生命周期 http://edndoc.esri.com/arcobjects/9.2/NET_Server_Doc/developer/ADF/ajax_callback.htm- 没有渲染,但必须创建控制树(繁重的服务器处理)
  • 仅采用您指定的数据(交通畅通)和可选的视图状态 http://msdn.microsoft.com/en-us/library/ms972976.aspx (?) (中等流量)
  • 客户端必须支持JavaScript并使用脚本管理器 http://msdn.microsoft.com/en-us/library/system.web.ui.scriptmanager.aspx
  • 没有闪烁/滚动,因为它是异步调用
  • 可与母版页和用户控件一起使用
  • 仅以您指定的格式返回您指定的数据(例如 JSON、XML...)(?)(交通畅通)
  • 在回调期间,页面必须在控件树中的同一位置添加关联的控件,否则会发生异常。

网络方法 http://msdn.microsoft.com/en-us/library/byxd99hx%28VS.71%29.aspx (系统.Web.服务.WebService http://msdn.microsoft.com/en-us/library/system.web.services.webservice.aspx)

  • 被认为是遗留技术。应该使用 WCF 服务代替 http://msdn.microsoft.com/en-us/library/aa738737.aspx.
  • Class implements System.Web.Service.WebService http://msdn.microsoft.com/en-us/library/system.web.services.webservice.aspx
    • HttpContext http://msdn.microsoft.com/en-us/library/system.web.httpcontext.aspx可以通过this.Context http://msdn.microsoft.com/en-us/library/system.web.services.webservice.context.aspx
  • 仅采用您指定的数据(交通畅通)
  • 服务器仅运行被调用的方法(轻服务器处理)
  • 客户端必须支持JavaScript
  • 没有闪烁/滚动,因为它是异步调用
  • 可与母版页和用户控件一起使用
  • Returns only data you specify, typically JSON (light traffic)
    • 可以创建服务器控件的实例来呈现 HTML 并作为字符串发回,但事件、GridView 中的分页等将不起作用

页面方法 http://www.singingeels.com/Articles/Using_Page_Methods_in_ASPNET_AJAX.aspx

  • Essentially a WebMethod http://msdn.microsoft.com/en-us/library/byxd99hx%28VS.71%29.aspx contained in the Page http://msdn.microsoft.com/en-us/library/system.web.ui.page.aspx class, so most of WebMethod http://msdn.microsoft.com/en-us/library/byxd99hx%28VS.71%29.aspx's bullet's apply
    • As with 网络方法 http://msdn.microsoft.com/en-us/library/byxd99hx%28VS.71%29.aspx,应该使用遗留技术和WCF服务。
    • 方法必须是public static,因此没有Page http://msdn.microsoft.com/en-us/library/system.web.ui.page.aspx实例可访问
    • HttpContext http://msdn.microsoft.com/en-us/library/system.web.httpcontext.aspx可以通过HttpContext.Current http://msdn.microsoft.com/en-us/library/system.web.httpcontext.current.aspx
  • Accessed directly by URL Page.aspx/MethodName (e.g. with XMLHttpRequest http://en.wikipedia.org/wiki/XMLHttpRequest directly or with library such as jQuery http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/)
    • Setting ScriptManager财产EnablePageMethods="True" 生成 JavaScript 代理 http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/对于每个网络方法 http://msdn.microsoft.com/en-us/library/byxd99hx%28VS.71%29.aspx
  • Cannot直接在用户控件中使用
  • 带有母版页和用户控件

周转基金服务 http://msdn.microsoft.com/en-us/library/bb332338.aspx

  • 取代网络方法 http://msdn.microsoft.com/en-us/library/byxd99hx%28VS.71%29.aspx and 页面方法 http://www.singingeels.com/Articles/Using_Page_Methods_in_ASPNET_AJAX.aspx
  • 接口有服务合同属性 http://msdn.microsoft.com/en-us/library/system.servicemodel.servicecontractattribute.aspx
  • 方法有操作合约属性 http://msdn.microsoft.com/en-us/library/system.servicemodel.operationcontractattribute.aspx
  • 与 WebMethod 具有相同的优点,而且更灵活

还有其他人吗?


WebMethod与 ASMX Web 服务一起使用,微软现在将其视为“遗留技术”。应改用 WCF 服务。它们支持基于 HTTP/HTTPS 的 SOAP 以及基于 REST 或 JSON 的服务,因此更加灵活。

出于这个原因,我也建议不要PageMethods,即使它们看起来很方便。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET 客户端到服务器的通信 的相关文章

随机推荐

  • 何时在 LINQ 中使用 lambda 表达式而不是Where子句

    我一直在深入研究 LINQ 并且正在尝试解决这个 lambda 表达式业务 我只是没有看到语法的一些细微差别的好处 首先 在我看来 lambda 表达式主要只是使用Where 子句的一种不同方式 那么为什么我不直接使用Where 子句呢 l
  • 在 Android 上使用 pjsip

    我成功安装并构建了pjsip图书馆和pjsua对于Android 我跑了pjsua在我的设备上并且它有效 但是我仍然不知道如何使用这个库的方法 我已经看过了CSipSimple应用程序 我注意到jni这两个项目的文件夹非常不同 我是否必须将
  • Google 计算引擎 .NET API 示例/样本/教程

    我还没有找到任何可以清楚地解释如何通过 net API 特别是 c 使用 google 计算引擎的内容 有没有人可以给我指点什么 附 我知道 API 参考 https developers google com resources api
  • 批量裁剪和调整图像大小以创建缩略图

    我有一大堆 jpg 图像 我想为其创建缩略图 这些图像都有不同的尺寸和分辨率 但我希望所有缩略图都有标准尺寸 例如120x80 像素 但是 我不想拉伸图像 所以我想做以下一些事情 将图像裁剪为 1 5 1 的宽高比 将裁剪区域居中 即左右
  • 如何使用 Google App 脚本在 Google 文档中插入 RichLink(Chip Block)

    Google Docs 最近推出了一个功能 大家可以参考一下 Date Person 谷歌云端硬盘文档 以一个形式芯片块 如上图所示 这文件 A已存在于 Google 云端硬盘中 目前生成此类 Chip Block 的唯一方法是手动将鼠标悬
  • 如何阻止注入的 HTML-div / CSS 继承样式? (IE浏览器)

    我正在为 Internet Explorer 创建一个扩展 在网页上注入 CSS 样式的 span 标签 如果单击该组件的特定部分 则会显示一个弹出窗口 这个弹出窗口实际上是一个 DIV 元素 我在内容页面的最后注入了 BODY 标签 我在
  • C# 比较两个集合的更有效方法

    我有两个收藏 List
  • Treeview 节点具有透明文本背景而不是默认的白色

    我正在使用自定义绘制来尝试创建透明树视图 现在我正在测试启用视觉样式时 My CDDS PREPAINT处理程序工作正常 树已正确绘制父级的背景位图 我尝试添加CDDS ITEMPREPAINT我使用的处理程序SetBkColor LPNM
  • 将文本添加到 .txt 文件中每个新行的开头

    我想将预定义文本添加到文本文件上的每个新行 并使用添加的文本创建一个新的文本文件 请帮忙 在 Windows 中 可以这样做 for f delims L in oldfile txt do echo predefined text L g
  • 覆盖 Salesforce Apex 中抽象类的属性

    我在 apex 中有一个抽象类 其中有几个我想在子类中重写的属性 根据文档 属性支持覆盖和虚拟访问修饰符 但是 当我尝试在父类或子类中使用它们中的任何一个时 我收到一条错误消息 指出变量不能标记为虚拟 覆盖 以下是导致此错误的代码的传真 p
  • Struts2 jQuery标签选择不加载数据

    我正在尝试使用
  • 将整个文件传递给 JVM 参数

    我有几个系统都需要将相同的属性加载到 JVM 我可以使用 D 标志一次加载一个属性 但我正在寻找一种可以一次性加载整个文件中所有属性的东西 例如 我可以将 options file blah properties 添加到网络上的所有 jvm
  • 群发电子邮件跟踪

    如今 大多数在线提供的服务都声称可以 跟踪 电子邮件 但都是通过在电子邮件中嵌入图像来实现这一目的 我的问题是 这是唯一的方法吗 如果不是 还有其他方法吗 这些方法真的万无一失吗 有人对特定软件甚至在线小组有过任何运气吗 是的 这几乎是唯一
  • 数据库中已有一个名为“tbltable1”的对象

    我正在尝试将数据从一个表插入到具有相同结构的另一个表中 select into tbltable1 from tbltable1 Link 我收到以下错误消息 There is already an object named tbltabl
  • 在 TextBlob 中使用翻译功能时出现“HTTPError: HTTP Error 404: Not Found”

    当我尝试在 jupyter 笔记本的 TextBlob 库中使用翻译函数时 我得到 HTTPError HTTP Error 404 Not Found 我在这里发布了我的代码和错误消息的屏幕截图以供参考 5 6 天前 当我第一次运行完全相
  • 改变statusStrip的高度

    我在VS2010中有一个带有statusStrip的简单Windows窗体 无论我尝试什么 statusStrip的高度都没有改变 改变高度的正确方法是什么 thanks 我刚刚更改了 StatusStrip 大小 没有出现问题 创建一个新
  • 无法推断通用参数“T”

    我正在重构我的代码并添加对 Swift 的支持generics 我遇到了编译器错误 我的代码是 func dequeueReusableViewController
  • Passport 和 connect-flash:req.flash 不是函数

    我在学flash消息输入passport并在运行我的脚本时遇到此错误 req flash is not a function 这是我的配置 var flash require connect flash app use flash pass
  • 替换 Query 对象的 my 字段时,缓存数据可能会丢失

    这是我的代码 const NewVerificationCode gt const loading error data refetch useQuery CONFIRMATION CODE skip true onError err gt
  • ASP.NET 客户端到服务器的通信

    您能帮助我了解 ASP NET 中从浏览器到客户端进行通信的所有不同方式吗 我已将其设为社区 wiki 因此请随意编辑我的帖子以改进它 具体来说 我试图通过列出每种方法的工作原理来了解在哪种情况下使用每种方法 我对 UpdatePanel