.net で書かれた小さなプロキシ サーバーがあります。コア プロキシ機能の簡略化されたバージョン:
builder.Run(async ctx =>
{
using (HttpClient client = new HttpClient())
{
await client.SendAsync(BuildRequest(), HttpCompletionOption.ResponseHeadersRead)
.ContinueWith(t => t.Result.Content.CopyToAsync(ctx.Response.Body));
}
});
考え方としては、プロキシはダウンストリームの応答を呼び出し元のクライアントに可能な限りそのままストリーミングするだけです。
プロキシとサービス間の接続は正常に機能しているようで、常に 17kb のデータが返されます。問題はクライアントとプロキシの間にあり、同じリクエストを送信すると、明らかに理由もなく、長さが 0 ~ 17kb のどこかで切り捨てられたレスポンスが返されます。
- サービス応答からクライアント応答にコンテンツをコピーするとき、すべてのコンテンツがいつ受信されたかをどのように確認できますか? チャンク転送は長さ 0 のチャンクで終了することを知っています。これを手動で確認する必要がありますか、それとも httpresponse インスタンス自体によって処理されるものですか?