c# - 用于缩小从 WebMethods 返回的 ASP.NET 3.5 XML 文档的选项

标签 c# asp.net json serialization webmethod

我继承了一个 ASP.NET (.net 3.5) Web 应用程序和相应的 C# 客户端组件以及相关的 javascript 客户端。

服务器端组件使用默认的 [WebMethod] 序列化,并且考虑到一些 XML 文档的大小(以及元素名称的冗长),我很好奇缩小返回文档大小的选项。

我对二进制 XML、XML 的自定义序列化(例如,将 ThisVeryLongElementNameWhichShowsUpALot 更改为更短的内容)、简单压缩、迁移到 JSON 等持开放态度。我们确实有相当多的单独 WebMethod 和返回的不同对象,因此理想的解决方案是在等式两边尽可能少地进行改变。

我知道在执行压缩或自定义序列化等操作时会需要权衡 CPU/带宽,因此我想在不构建大量代码的情况下对一些选项进行基准测试。

有人可以向我指出相关文档或 IIS/VS.NET 选项来配置以探索这些权衡吗?

最佳答案

我最近测试了 IIS 压缩,在弄清楚如何设置压缩级别后,我对结果感到满意。最终结果是将 196 kb JSON 结果压缩为 13.6 kb。

下面是我自己做的一些关于设置动态压缩和设置压缩级别的笔记。如果它们很粗糙,我深表歉意,因为我制作它们主要是为了自己将来的引用。

此外,我绝对建议尝试 JSON 而不是 XML,因为它提供了更紧凑的结果。我没有具体的数字,但我的印象是 JSON 比 XMl 小 50% 左右。


必要时安装动态压缩

Windows 7:

  1. 转至“开始”>“控制面板”>“程序和功能”,打开“程序和功能”控制台。
  2. 点击“打开或关闭 Windows 功能”。
  3. 在对话框中,展开 Internet 信息服务 > 万维网服务 > 性能功能,然后启用动态内容压缩。
  4. 点击“确定”。

Windows Server 2008:

  1. 转至“开始”>“所有程序”>“管理工具”>“服务器管理器”,打开服务器管理器控制台。
  2. 在服务器管理器 TreeView 中,展开“角色”,然后单击“Web 服务器 (IIS)”。
  3. 在主窗口中,向下滚动到“角色服务”面板,然后单击“添加角色服务”。
  4. 在“选择角色服务”对话框中,单击并启用“Web 服务器(已安装)”>“性能(已安装)”>“动态内容压缩”。
  5. 单击“下一步”。
  6. 在“确认安装选择”屏幕上,点击“安装”。

在 IIS 中启用动态压缩

  1. 在 IIS 管理应用中,选择服务器,然后在 IIS 功能组中双击“压缩”。
  2. 选中“启用动态内容压缩”。

启用“application/json”和“application/xml”

  1. 在 c:\Windows\System32\inetserv\config 中查找 applicationHost.config 文件
  2. 编辑它并找到 httpCompression 元素。
  3. <dynamicTypes> ,添加以下元素:
<add mimeType="application/json" enabled="true" />
<add mimeType="application/xml" enabled="true" />

重新启动 IIS。

要进行验证,请检查 Fiddler 并确保未选择“解码”按钮(“解码”按钮应位于主工具栏上)。您应该看到响应“Content-Encoding” header 显示“gzip”,并且响应已压缩:

enter image description here

高级设置

使用以下命令设置压缩级别(默认级别为0):

C:\Windows\System32\Inetsrv\Appcmd.exe 
    set config -section:httpCompression
    -[name='gzip'].staticCompressionLevel:9
    -[name='gzip'].dynamicCompressionLevel:4

请访问这些网站了解更多详细信息:

Making the most out of IIS compression - Part 1: IIS 7 configuration

IIS 7 Compression. Good? Bad? How much?

我对 json 响应的初步测试:

None:          196,416 bytes
Level 0:        35,234
Level 1:        29,219
Level 4:        18,461
Level 9:        13,638

关于c# - 用于缩小从 WebMethods 返回的 ASP.NET 3.5 XML 文档的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7643041/

相关文章:

c# - ASP.NET C# MySql 选择和更新表单

c# - C# 中的 setnewhandler

c# - 无法使用 Unity 创建接口(interface)实例

asp.net - 如何在asp.net core 3.0中正确实现PayPal支付

javascript - 如何在 react 中进行双json外部调用

c# - WcfSvcHost 的跨域异常

c# - 在 MVVM WPF 应用程序中实现模式对话框时用 DependencyInjection 替换 ServiceLocator

c# - 如何发布我的网站?

java - ArrayList HashMap 未定义

json - 我如何仅模拟 Alamofire 响应?