以编程方式从配置数据库 IIS6 中删除 etag 后缀(更改编号)

2023-12-29

IIS 6.0 以“hash:changenumber”格式生成 eTag 值。每次 IIS 重置时,更改编号都会增加,因此您的 eTag 仅在 IIS 进程的生命周期内有效。重启,number上升,hash:changenumber != hash:changenumber+1。

解决这个问题的方法是对changenumber进行硬编码 http://support.microsoft.com/kb/922703/,这可以使用元数据库资源管理器(一种用于编辑元数据库的 .NET 实用程序)或在 IIS 服务停止时编辑 XML 文件来实现。

我想在服务器运行的情况下以编程方式执行此操作,就像我可以使用 ADSI 或 WMI 设置所有其他元数据库属性一样。对于这一点,这似乎不可能,因为该属性(仅在内部称为 MD_ETAG_CHANGENUMBER)似乎没有匹配的属性名称。

以下是 VBScript 中的问题示例:

set obj=GetObject("IIS://localhost/W3svc")
WScript.Echo "Log type: " & obj.LogType
WScript.Echo "Change number: " & obj.MD_ETAG_CHANGENUMBER

输出:

Log type: 1
etag.vbs(3, 1) Microsoft VBScript runtime error: Object doesn't support this property or method: 'obj.MD_ETAG_CHANGENUMBER'

我希望能够在 C# 中设置这个值。除了停止 IIS、在 XML 中设置值并重新启动它之外,是否有一种以编程方式设置此值的方法?

我最好的想法是(ab)使用Metabase Explorer 附带的IISMbLib.dll,所以如果有人有使用它的经验,我很乐意听到它。

参考:

  • MD_ETAG_CHANGENUMBER 配置数据库属性 (IIS 6.0) http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/ef7f9d58-2a96-4bd8-8ac1-2a67b43284f1.mspx?mfr=true
  • IIS 论坛线程讨论该问题,但没有解决方案 http://forums.iis.net/p/1147600/1861998.aspx

crb,感谢您提供了出色的解决方案,我无法找到替代方案(尽管我之前已通过自定义 ISAPI 使用的一些棘手的 ADSI 脚本将我自己的自定义元数据库属性添加到 IIS 6 架构中)

这是您的解决方案的 powershell 版本。它假定 MB Explorer 程序集已本地复制到其中。

$myPath = [System.IO.Path]::GetDirectoryName($MyInvocation.MyCommand.Path)

Import-Module "$myPath\IISMbLib.dll"

$etagValue = 12345
$metabase = New-Object IISConfig.Metabase
$metabase.OpenLocalMachine()

$key = $metabase.GetKeyFromPath("/LM/W3SVC")

if ($key.ContainsRecord(2039) -eq [IISConfig.ValueExistOptions]::Explicit)
{
    $record = $key.GetRecord(2039)
    Write-Host "Existing ETag value found:", $record.Data.ToString()
}
else
{
    Write-Host "Creating new value..."
    $record = New-Object IISConfig.Record
    $record.DataType = [IISConfig.Record+DataTypes]::DWORD
    $record.Identifier = 2039
    $record.ChangeAttribute([IISConfig.Record+AttributeList]::Inherit, $true)
}
$record.Data = [System.Convert]::ToUInt32($etagValue)
Write-Host "New ETag value:", $record.Data.ToString()
$key.SetRecord($record)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以编程方式从配置数据库 IIS6 中删除 etag 后缀(更改编号) 的相关文章

  • IIS6 上的 ASP.NET MVC

    在哪里可以找到有关在 IIS6 上运行 ASP NET MVC 最佳实践的一些好建议 对于提供 IIS7 托管的网络主机 我还没有看到任何现实的选择 主要是因为我不住在美国 因此 我想知道如何最好地在 ASP NET MVC 中构建应用程序
  • 从 favicon.ico 中删除 Etag

    在项目上使用 yslow 我遇到了一个无法解决的 问题 伊斯洛不断抱怨 有 1 个组件的 ETag 配置错误http www domain com favicon ico http www domain com favicon ico 我的
  • 为 FileResult 设置 ETag - MVC 3

    MVC 3 RTM 我有一个返回文件 image jpeg 的操作 我试图为文件设置 ETag 但没有成功 etag 没有出现在标头中 我尝试过 Response Cache SetETag 和 Response AppenderHeade
  • 如何使用命令行在 IIS 中创建应用程序?

    通过命令行 相当于 IIS 6 0 主目录选项卡中的创建按钮的是什么 用于在目录上创建应用程序 编辑 我已经知道 iidvdir 了 不幸的是 它似乎没有按照我想要的方式工作 或者我没有正确使用它 假设我有一个名为Website对于女巫来说
  • 在 IIS 6 / ASP.NET Web 表单中记录服务器范围的请求数据(包括 POST 数据)

    这是大局 我们正在 IIS 6 中运行一台服务器 该服务器托管多个网站和应用程序 并且我们正在将整个服务器迁移到设置略有不同的不同数据中心 我们已经通知了我们的用户并更新了我们的 DNS 信息 这样理论上每个人都会从第一天起就高兴地访问新服
  • 如何像任务管理器一样计算内存使用情况?

    好的 我正在使用 WMI net C 不断收集有关计算机上运行的特定进程的数据 我通过获取数据Win32 PerfFormattedData PerfProc Process https msdn microsoft com en us l
  • QCoreApplication 带有 WMI 的 QApplication

    我在MSDN网站上找到了一些WMI C 应用示例 我已经尝试过以下链接中的代码 http msdn microsoft com en us library aa390423 28v VS 85 29 aspx http msdn micro
  • 更改 WPF 应用程序中的默认打印机

    我正在寻找更改 WPF 应用程序中默认打印机的最佳方法 以下是我们希望应用程序能够执行的步骤 从下拉列表中选择映射到打印机名称的位置 将默认打印机更改为映射名称 启动 IE 并指向 SSRS 报告 然后 用户将从 IE 打印报告 IE 将使
  • 无法从 32 位进程访问 Win32_WinSAT

    当从 x64 进程请求 Win32 WinSAT 时 我得到正确的结果 WinSATAssessmentState 1 但当从 x86 执行时 我得到 结果不可用 WinSATAssessmentState 3 x64 Powershell
  • HTTP_USER_AGENT Java/1.6.0_17 生产网站上的奇怪异常

    今天 我们的生产网站上收到了一些奇怪的异常情况 它们都有以下 HTTP USER AGENT 字符串 Java 1 6 0 17 我查了一下UserAgentString com http www useragentstring com i
  • 将 WMI 调用转换为 CIM 调用

    我正在编写的代码应该启动当前可用于使用 CIM 的服务器的任何补丁 由于我的网络需要 DCOM 协议 我必须使用 CIM 我使用 以便于查看 以下 wmi 代码有效 ComputerName Foo System Management Ma
  • 无法加载文件或程序集“System.Web.WebPages.Razor、Version=2.0.0.0、Culture=neutral”或其依赖项之一

    请有人帮我解决这个问题 作为 IIS6 上父级的 Umbraco 应用程序具有以下版本的 System Web WebPages Razor
  • 使用WMI远程卸载应用程序

    我正在尝试编写一个迷你 w32 可执行文件来使用 WMI 远程卸载应用程序 我可以使用下面的代码列出所有已安装的应用程序 但我找不到通过 WMI 和 C 远程卸载应用程序的方法 我知道我可以使用 msiexec 作为进程来执行相同的操作 但
  • 在 WiX 中如何通过名称选择 IIS 网站?

    我想做的是向安装程序用户显示其服务器上的网站列表 并允许他们选择一个 使用此处描述的方法 http www cmcrossroads com content view 13160 120 http www cmcrossroads com
  • 在请求中包含 Via 标头时,IIS6 不执行 gzip 压缩

    我有一些静态内容正在通过 CDN 我正在使用 IIS6 的内置压缩 gzip 和 deflate 来压缩静态内容 当我请求它时 它工作得很好 但是 当 CDN 发出对内容的初始请求时 它不会以压缩形式返回 因此 他们没有压缩内容可以转发给请
  • 是否有必要将每个 ManagementObject 都处理掉?

    我注意到ManagementObject is IDisposable 但它也是从ManagementClass GetInstances and ManagementObjectSearcher Get 这是否意味着我需要处理遇到的每个对
  • 让 IIS6 与 WordPress 完美配合

    我有一个由 WordPress 驱动的博客 我正在尝试在 IIS6 服务器上进行设置 除了令我头疼的永久链接结构之外 一切正常 在谷歌搜索 wordpress codex之后 我了解到这是因为IIS6没有相当于Apache的mod rewr
  • 使用 IIS 6 进行 Web 部署时出现问题

    我已经尝试使用 Visual Studio 2010 中的 Web 部署选项发布到安装了 Windows Server 2003 的 IIS 6 服务器很长时间了 我已在服务器上安装了 Web 部署代理 启动了服务并遵循此链接中的所有说明
  • asp和iis 6.0从哪里获取其日期格式

    我发现了一个带有新网络服务器的小泡菜 我们有一个新的网络服务器 它显示的日期与我们旧的网络服务器不同 我们在 Windows Server 2003 的 IIS 6 0 上运行 asp 经典网页 我们以管理员身份登录并设置适当的区域设置 然
  • 从 WMI 运行 exe 时的网络身份验证

    我有一个 C exe 需要使用 WMI 运行并访问网络共享 但是 当我访问共享时 我收到 UnauthorizedAccessException 如果我直接运行 exe 则可以访问共享 我在这两种情况下都使用相同的用户帐户 我的应用程序有两

随机推荐