我有一个托管在Windows Azure云服务上的WCF 4.0 restful应用程序,我需要知道传出的HTTP消息在发送回客户端之前的大小。
我需要这个,因为我想通过带宽消耗来为我的服务客户收费。
我有两种方法,如下所示,两者都有标识客户端的token参数。因此,当客户端调用任何方法时,我需要发现响应的大小并注册该客户端和方法的带宽消耗。
这样我就可以为每个客户发送发票。
请注意,响应可以返回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压缩时,content-length头返回null,否则它会正常返回。即使响应被压缩,我如何获得内容长度?无论如何,内容长度不表示传出消息的总大小,那么如何获得传出消息的总大小?
public class Global : HttpApplication
{
protected void Application_EndRequest(object sender, EventArgs e)
{
var response = this.Response;
var str = response.Headers["Content-Length"];
}
}
任何帮助都将非常感激。
此致
FernandoMôra
答案 0 :(得分:1)