5

HttpWebRequestから取得した応答をキャッシュしたいと思います。ResponseStreamとヘッダーの両方が必要です。リクエストを作成するときに使用HttpRequestCachePolicy(HttpCacheAgeControl.MaxAge, TimeSpan.FromDays(1))するのはうまくいかないようです(何らかの理由でIsFromCacheがtrueになることはありません)。また、gzip圧縮されたデータのストリームが含まれているため、HttpWebResponse全体を手動でキャッシュするのが少し怖いです。 ASP.NETキャッシュにストリームを保存します。

応答は次のようなオブジェクトにマップされます(簡略化):

public readonly Stream Response;
public readonly string Etag;

private MyObject(Stream response, string etag)
{
    this.Response = response;
    this.Etag = etag;
}

オブジェクトには応答ストリームも含まれているため、ここでも同じ問題に直面します。

これをキャッシュするにはどうすればよいですか?

4

2 に答える 2

7

AStreamパイプであり、バケットではありません。保存する必要がある場合は、最初に実際のコンテンツを取得する必要があります。たとえば、すべてをに読み込むことができますbyte[]。例えば:

using(var ms = new MemoryStream()) {
    response.CopyTo(ms);
    byte[] payload = ms.ToArray();
}

ささいなことで保存できbyte[]ます。その後、Stream後で必要な場合は、を使用できますnew MemoryStream(payload)

于 2012-10-02T13:50:39.633 に答える
2

データを格納するためのバイト配列と、ヘッダーにHttpWebRequest.Headersを使用する別のフィールドを含むカスタムクラスを作成できますか?次に、それをキャッシュします。

于 2012-10-02T13:50:25.740 に答える