在C#中配置BITS(Microsoft后台智能传输服务)中的请求标头

时间:2012-07-09 21:53:01

标签: httpwebrequest http-headers microsoft-bits

我正在尝试通过BITS下载文件并且作业失败(给我一个错误),因为我没有在GET请求的http标头中提到“referer”。

        BitsManager manager = new BitsManager();           
        manager.EnumJobs(JobOwner.CurrentUser);
        BitsJob newJob = manager.CreateJob(j.filename, JobType.Download);
        j.jobID = newJob.JobId;

        newJob.AddFile(j.serverLink, "C:\\Downloads\\" + j.filename);
        newJob.Priority = JobPriority.ForeGround;
        newJob.MinimumRetryDelay = 60;
        manager.OnJobTransferred += new EventHandler<NotificationEventArgs>(manager_OnJobTransferred);
        manager.OnJobModified += new EventHandler<NotificationEventArgs>(manager_OnJobModified);
        newJob.Resume();

有没有办法为作业的GET请求配置标题

非常感谢,

阳光

2 个答案:

答案 0 :(得分:1)

听起来我的HTTP服务器可能与BITS的HTTP要求不兼容

  

BITS下载的HTTP要求

     

BITS支持HTTP和HTTPS下载和上传,并且需要这样做   服务器支持HTTP / 1.1协议。对于下载,HTTP   server的Head方法必须返回文件大小,其Get方法必须   支持Content-Range和Content-Length标头。结果是,   BITS仅传输静态文件内容,如果您生成错误   尝试传输动态内容,除非ASP,ISAPI或CGI脚本   支持Content-Range和Content-Length标头。

     

BITS可以使用   HTTP / 1.0服务器,只要它符合Head和Get方法   要求。

     

要支持下载文件范围,服务器必须   支持以下要求:

     
      
  • 允许MIME标头包含标准的Content-Range和Content-Type标头,以及最多180个字节的其他标头。

  •   
  • 在HTTPheaders和第一个边界字符串之间最多允许两个CR / LF。

  •   

有关详细信息,请查看this link

答案 1 :(得分:1)

BITS使您可以在请求上设置自定义标头。

Microsoft的BITS团队现在在Calling into BITS from .NET and C# using reference DLLs上有一个页面,在GitHub上有完整的示例调用BITS Manager

我刚刚尝试了对该示例的自定义修改。在setJobPropertyControl.xaml.cs中,我将作业投射到IBackgroundCopyJobHttpOptions上,如下所示:

var jobHttpOptions = job as BITS4.IBackgroundCopyJobHttpOptions;

我也必须做

using BITS4 = BITSReference4_0;

那么我可以

jobHttpOptions.SetCustomHeaders (text); 

其中text是您需要设置的标题。您可以通过串联一个大字符串来设置多个标题(“ referer:http://www.example.com \ r \ nx-other-header:another header \ r \ n”)。请注意,HTTP标头必须用\ r \ n分隔!