3

Windows Azure クラウド サービスでホストされている WCF 4.0 レストフル アプリケーションがあり、クライアントに送り返す前に送信 HTTP メッセージのサイズを知る必要があります。

帯域幅の消費量に基づいてサービスの顧客に請求したいので、これが必要です。

以下に示すように 2 つのメソッドがあり、どちらにもクライアントを識別するトークン パラメーターがあります。そのため、クライアントがメソッドを呼び出したときに、応答のサイズを検出し、そのクライアントとメソッドの帯域幅消費を登録する必要があります。

そうすれば、顧客ごとに請求書を送ることができます。

応答は、XML/JSON として返され、Gzip によって圧縮される場合があることに注意してください。

誰か手を貸してくれませんか?

[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Single, Namespace = "")]
public class ZipCodeService
{
    [WebGet(UriTemplate = "/GetAddressByZipCode?token={token}&zipcode={zipcode}")]
    public GetAddressByZipCodeContract GetAddressByZipCode(string zipCode, string token)
    {
        // ...
    }

    [WebGet(UriTemplate = "/GetZipCodeByAddress?token={token}&keywords={keywords}")]
    public GetZipCodeByAddressContract GetZipCodeByAddress(string keywords, string token)
    {
        // ...
    }
}

httpレスポンスを取得しようとすると、Gzipで圧縮されているため、コンテンツ長ヘッダーがnullを返します。それ以外の場合は正常に返されます。応答が圧縮されている場合でも、コンテンツの長さを取得するにはどうすればよいですか? とにかく、コンテンツの長さは送信メッセージの合計サイズを表していないので、送信メッセージの合計サイズを取得するにはどうすればよいですか?

public class Global : HttpApplication
{
    protected void Application_EndRequest(object sender, EventArgs e)
    {
        var response = this.Response;

        var str = response.Headers["Content-Length"];
    }
}

どんな助けでも本当に感謝します。

よろしく、

フェルナンド モラ

4

1 に答える 1

1

これを見てみてください:
How To Intercept a WCF Mesage to Track Message Size
or
WCF Custom Message Encoder & Operation Message Size

于 2013-01-07T14:33:39.323 に答える