BITS IIS 扩展属性

后台智能传输服务 (BITS) 使用 ISAPI 扩展 IIS 以支持上传作业。 下表列出了 BITS 添加到虚拟目录组件的 IIS 元数据库的属性。 BITS 使用这些属性来确定如何上传文件。 BITS IIS 扩展属性是可继承的,BITSUploadEnabled 除外。

properties 说明
BITSUploadEnabled 数据类型:布尔值
指示是否在虚拟目录中启用 BITS 上传。 如果设置不存在或为 0,则禁用 BITS 上传。
这是只读属性。 若要设置此属性,请调用 IBITSExtensionSetup 接口的 EnableBITSUploadsDisableBITSUploads 方法。
BITSSessionTimeout 数据类型:DWORD
如果上传文件没有进展,则保持连接的秒数;当取得进展时,计时器被重置。 如果达到超时并清理与会话关联的数据,则 BITS 将关闭连接。
设置短会话超时可能是上传答复作业的问题,因为只有在用户登录并连接到网络时才会下载答复。 在下载答复之前,会话可能会超时,在这种情况下,会话被取消,并且答复文件被删除。
请注意,如果达到 JobInactivityTimeout 组策略值(默认值为 90 天),则 BITS 会取消作业,而不考虑此设置。
默认值为 1209600(14 天)。
BITSMaximumUploadSize 数据类型:字符串
每个作业可以上传的最大字节数。 将最大字节数指定为十进制字符串;字符串值必须小于或等于“1844674407370955”。 空字符串与指定“1844674407370955”相同。
默认值为一个空字符串。
注意:在 IIS 7 中,默认上传限制为 3000 万字节。 BITSMaximumUploadSize 属性的值不能超过 IIS 限制。 有关详细信息和更改 IIS 默认值的信息,请参阅 KB942074
BITSServerNotificationType 数据类型:DWORD
指定如何将上传文件发送到服务器应用程序。 可能的值为:0、1 和 2。
值为 0 表示文件未发送到服务器应用程序。 BITS 将上传文件置于远程名称中指定的目录中(将文件添加到作业时指定的远程名称),而不通知服务器应用程序。 如果文件当前存在于目标目录中,则会将其替换为上传文件。
值 1 表示 BITS 将上传文件的位置传递给 BITSServerNotificationURL 属性中指定的服务器应用程序。 服务器应用程序会处理该文件并根据需要生成答复文件。 默认情况下,BITS 从服务器应用程序收到响应后,会从服务器中删除上传和答复文件。 若要使 BITS 将上传文件复制到作业中远程文件名指定的位置,请在响应中包含 BITS-Copy-File-To-Destination 标头。 如果不包含标头,并且想要保存上传和答复文件,则必须在响应之前将上传和答复文件复制到新位置。
值 2 表示 BITS 将请求正文中的上传文件传递给 BITSServerNotificationURL 属性中指定的服务器应用程序。 如果需要,服务器应用程序会处理该文件,并在响应正文中传回回复。
有关请求和响应标头的详细信息,请参阅服务器应用程序的通知协议
服务器应用程序必须在五分钟内提供响应。 如果服务器应用程序在五分钟内未答复,作业将进入暂时性错误状态。 当重试延迟过期时,BITS 服务器将向服务器应用程序发送另一条通知(应写入服务器应用程序来处理重复通知)。BITS 1.5:通知超时为 30 秒。

默认值为 0。
BITSServerNotificationURL 数据类型:字符串
可选。 包含 BITS 将上传文件发布到的服务器应用程序的 URL。 如果 BITSServerNotificationType 属性的值为 1 或 2,则必须指定 URL。 URL 限制为 2,200 个字符,不包括 null 终止符。 URL 必须是 HTTP URL;BITS 不支持 HTTPS 通知 URL。
如果在上传时 URL 不可用,则 BITS 将重试上传,直到通知 URL 存在或重试期到期。
请注意,如果作业中指定的远程名称包含查询字符串,查询字符串将追加到指定的 URL。 例如,如果远程名称包含 https://myserver/myvdir/subdir/file.asp?ACCOUNT=86433,并指定 BITSServerNotificationURL 设置为 https://otherserver/myvdir2/bag.asp,则 BITS 发布到的 URL 为 https://otherserver/myvdir2/bag.asp?ACCOUNT=86433.
如果原始 URL 为 https://myserver/myvdir/file.txt,并且通知 URL 为 myasp.asp,BITS 将使用 http//myserver/myvdir/myasp.asp 作为通知 URL。
如果 URL 的路径和文件名部分包含客户端和服务器上的代码页不常见的 Unicode 字符,则 URL 转换将在服务器上失败,BITS 作业将置于错误状态。 如果 URL 的服务器部分包含 Unicode 字符,则必须使用国际化域名 (IDN) 对服务器部分进行编码。
BITSHostId 数据类型:字符串
如果服务器安装是不使用共享存储的 Web 场,请设置此属性。
指定在上传过程中断后要重新连接到的服务器的服务器名称或 IP 地址。 通常,指定要配置的服务器的名称。 URL 限制为 300 个字符,不包括 null 终止符。
如果未指定此属性,并且上传过程中断,则 BITS 可能会恢复场中另一台服务器上的作业。 但是,上一个服务器仍包含中断前的部分上传文件。 BITS 在 BITSSessionTimeout 过期后删除部分文件。
注意:如果在使用网络负载平衡 (NLB) 或具有多个 IP 地址的 DNS 名称的 Web 场中使用 SSL,请不要使用 BITSHostId 属性,除非在证书中包含群集名称和单个服务器名称。 (如果在 BITSHostId 中指定的服务器名称与证书上的公用名不匹配,作业将失败。)相反,对于 NLB,请将 Affinity 参数设置为 Single,以确保客户端将来与同一服务器通信。
BITSHostIdFallbackTimeout 数据类型:DWORD
BITS 客户端尝试重新连接到 BITSHostId 服务器名称的秒数,然后还原作业的远程文件名中指定的主机名。 当 BITS 无法连接到 BITSHostId 服务器时,计时器将开始。 当客户端成功连接到服务器时,计时器将重置。
请注意,作业的进度超时值(请参阅 IBackgroundCopyJob::SetNoProgressTimeout)应长于此超时值。 否则,在回退超时值过期之前,作业将失败。
仅当设置 BITSHostId 属性时设置此属性。
默认值为 86,400(1 天)。
BITSAllowOverwrites 数据类型:整数
指示上传文件是否可以覆盖具有相同名称的现有文件。 如果 BITSAllowOverwrites 为 1,则上传文件将覆盖现有文件。
默认值为 0。
IIS 6.0:只能从脚本中设置此属性,不能使用 IIS 用户界面中的 BITS 扩展属性页对其进行设置。

BITSCleanupUseDefault 数据类型:布尔值
指示清理任务是否使用默认计划。 默认情况下,清理任务每 12 小时运行一次。
设置为 1 以使用默认计划;否则为 0 以指定计划。
若要指定计划,请使用 BITSCleanupCountBITSCleanupUnits 属性。
清理任务通过删除会话超时期间内尚未修改的作业来清理虚拟目录(请参阅 BITSSessionTimeout)。
默认值为 1,使用默认计划。
IIS 6.0:不支持。
BITSCleanupCount 数据类型:整数
指定要在运行清理任务之间等待的间隔。 可以指定的间隔取决于单位。 有关可能的间隔值,请参阅 BITSCleanupUnits 属性。
如果 BITSCleanupUseDefault 为 0,则会忽略该属性。
IIS 6.0:不支持。

BITSCleanupUnits 数据类型:整数
指定 BITSCleanupCount 属性中指定的清理间隔的单位。 如果 BITSCleanupUseDefault 为 0,则会忽略该属性。
可能的值为:
0:单位为分钟数。 可能的值为 1 到 60。
1:单位为小时。 这是默认值。 可能的值为 1 到 24。
2:单位为天。 可能的值为 1 到 360。

IIS 6.0:不支持。

BITSNumberOfSessionsLimit 数据类型:整数
限制用户可以并发存在的上传会话数。 如果用户的会话数超过此限制,则当清理任务运行时,它将删除最近的会话,直到用户的会话数低于限制。
默认值为 50 个会话。
IIS 6.0:不支持。

BITSSessionLimitEnable 数据类型:布尔值
指示 BITS 是否限制每个用户的上传会话数。 如果设置不存在或为 0,则会禁用限制。
若要指定限制,请设置 BITSNumberOfSessionsLimit 属性。
默认值为 1。
IIS 6.0:不支持。

以下示例演示如何使用 Windows 脚本主机设置 BITS IIS 扩展属性。 如果虚拟目录指向远程共享,则还设置 UNCUserNameUNCPassword IIS 属性。

if (WScript.Arguments.length < 2)
{
    WScript.Echo("Usage: bitsvdir virtual_directory local_directory");
    WScript.Quit(1);
}

VirtualDirectoryName = WScript.Arguments(0);
LocalDirectoryName = WScript.Arguments(1);

ServerObj = GetObject("IIS://LocalHost/W3SVC/1/ROOT");
VirtualDir = ServerObj.Create("IIsWebVirtualDir", VirtualDirectoryName );

VirtualDir.Path = LocalDirectoryName;
VirtualDir.AppIsolated = 0;
VirtualDir.AccessScript = true;
VirtualDir.AccessRead = false;
VirtualDir.AccessWrite = false;
VirtualDir.SetInfo();

// Set BITS specific IIS configuration settings
VirtualDir.EnableBITSUploads();
VirtualDir.BITSMaximumUploadSize = "4294967296";
VirtualDir.SetInfo();

WScript.Echo( "Created virtual directory " + VirtualDirectoryName + 
              " with a local directory of " + LocalDirectoryName );
WScript.Quit( 0 );