使用C#中的BITS(后台智能传输服务)

本文关键字:智能 传输 服务 后台 中的 BITS 使用 | 更新日期: 2023-09-27 17:59:44

我想写一些代码,使用BITS在同一服务器上的磁盘之间复制非常大的文件(第二个磁盘是SAN级别的克隆''快照)。

我研究了BITS,因为我认为这将是一个很好的方法来获得传输的进度''完成百分比数据,以及恢复功能等

我有很多托管的Powershell,我想我会尝试使用内置的BITS cmdlet,因为这将是一种非常快速的方法,我可以编写包装来获得我需要的东西等。不幸的是,我遇到了这个:

在非交互上下文(如Windows服务)中运行的进程中使用*-BitsTransfer cmdlet时,可能无法将文件添加到BITS作业,这可能会导致挂起状态。若要继续执行作业,必须登录用于创建传输作业的标识。例如,在PowerShell脚本中创建BITS作业(该作业作为任务计划程序作业执行)时,BITS传输将永远不会完成,除非启用了任务计划程序的任务设置"仅在用户登录时运行"。"

通过模拟的Powershell运行空间执行任何操作都会引发以下错误:

由于用户尚未登录到网络,因此未执行请求的操作。指定的服务不存在。(HRESULT:0x800704DD的异常)"

我的web服务以AppPoolIdentity的身份运行,当需要做一些事情时,我会模拟它。这是有道理的,它不能通过托管的Powershell工作,但有人能想出解决办法吗?如果这不可能,我有其他选择吗?

我曾考虑使用BITS Compact服务器作为替代方案,但文档很古老。

使用C#中的BITS(后台智能传输服务)

你想过使用robocopy吗?使用/ZB开关运行对我来说一直很好,使用/J可以提高性能,它可以启用无缓冲I/O。对于输出,也使用/ETA和/TEE运行。