0

我需要实现一个可以将文件发布到位的 Web 服务(后台智能传输服务)。语言是 ASP.NET (C#)。我遇到的问题是“范围”的东西。

我的代码当前接收到 http 请求(有效范围存在于 0 - 4907 的 http 标头中),然后在响应对象中输出字节数组的一部分。

这是我的服务器代码:

_context.Response.Clear();
_context.Response.AddHeader("Content-Range", "bytes " + lower.ToString() + "-" +  upper.ToString() + "//" + view.Content.Length.ToString());
_context.Response.AddHeader("Content-Length", upper.ToString());
_context.Response.AddHeader("Accept-Ranges", "bytes");
_context.Response.ContentType = "application/octet-stream";
_context.Response.BinaryWrite(data);
_context.Response.End();

接下来发生的事情是,随后的请求在标头中根本没有任何“范围”键……就像它要求整个文件一样!不用说,位作业错误表明服务器响应无效。

我怀疑这完全取决于服务器在响应对象中返回的标头......我很确定我在这里遵循协议。

如果有人可以提供帮助,将不胜感激......同时......我会继续寻找!

问候

4

2 回答 2

1

是的,我发现我总共有几个问题。IIS 是一个最初的问题,然后是我的长度计算......然后就像你说的,范围请求它是自我的。忽略后者,我对此段的最终代码是:

_context.Response.StatusCode = 206;
_context.Response.AddHeader("Content-Range", string.Format("bytes {0}-{1}/{2}", lower.ToString(), upper.ToString(), view.Content.Length.ToString()));
_context.Response.AddHeader("Content-Length", length.ToString());
_context.Response.AddHeader("Accept-Ranges", "bytes");
_context.Response.OutputStream.Write(view.Content.ToArray(), lower, length);

处理多请求范围可以在不同的日子处理!如果 BITS 以这种方式请求(就像它在第一个请求之后要求整个文件的第二个请求中所做的那样),我的代码根本不返回任何内容......然后 BITS 在请求中发送一个范围......一切正常从那里。

感谢您的回复。

于 2011-09-26T11:39:15.407 回答
0

您还可以针对已知的静态文件测试运行您的 BITS 请求,并使用 WireShark 嗅探数据包。这肯定会准确地揭示如何做到这一点。

于 2012-03-15T05:11:38.530 回答