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がこのように要求した場合(ファイル全体を要求する最初の要求の後の2番目の要求の場合のように)、私のコードは単に何も返しません...そしてBITSは要求で単一の範囲を送信します...問題なく動作しますそこから。

返信ありがとうございます。

于 2011-09-26T11:39:15.407 に答える
0

また、既知の静的ファイルに対して BITS 要求をテスト実行し、WireShark でパケットを盗聴することもできます。それはそれを行う方法を正確に明らかにするはずです.

于 2012-03-15T05:11:38.530 に答える