如何获得WCF 4.0 Restful响应的带宽消耗



我有一个托管在Windows Azure云服务上的WCF 4.0 restful应用程序,我需要知道传出HTTP消息的大小,然后再发送回客户端。

我需要这个,因为我想按带宽消耗向我的服务客户收费。

我有两个方法,如下所示,它们都有标识客户机的令牌参数。因此,当客户端调用任何方法时,我需要发现响应的大小并注册该客户端和方法的带宽消耗。

这样我就可以给每个客户发发票了。

请注意,响应可能以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,否则它返回正常。即使响应是压缩的,我如何获得内容长度?无论如何,content-length并不表示传出消息的总大小,那么我如何获得传出消息的总大小呢?

public class Global : HttpApplication
{
    protected void Application_EndRequest(object sender, EventArgs e)
    {
        var response = this.Response;
        var str = response.Headers["Content-Length"];
    }
}

任何帮助都将是非常感激的。

问候,

费尔南多·莫拉

试着看看这个:
如何拦截WCF消息以跟踪消息大小

WCF自定义消息编码器操作消息大小

最新更新