在WCF中获取“在线”消息的大小

时间:2010-05-25 23:38:04

标签: .net wcf performance networking

当我向WCF进行SOAP或REST调用时,我希望两端的通道堆栈(客户端和服务器)记录接收数据的线上大小。所以我猜我需要在两侧的通道堆栈中添加自定义行为。也就是说,在服务器端,我将记录收到的IP报头通告大小(累计,直到收到该消息的所有数据包)。在客户端,我将记录从服务器返回的IP标头广告大小(相同的求和过程)。

但这预先假定此信息对于通道堆栈级别的自定义WCF行为是可见的。也许它只在ASP.NET级别(在WCF下面的一层)可见?或者也许WCF已经收集了这个“总消息大小”信息,我可以简单地访问一个属性?

简而言之,是否有人进一步了解这些信息是否以及如何获取?作为常规业务逻辑调用的一部分,我必须证明这个“大小”数据将在生产环境中收集。因此,我对solutions proposed elsewhere不感兴趣。

这个问题与我之前的bandwidth question有关。

3 个答案:

答案 0 :(得分:7)

如果您set up WCF tracing and message logging,您可以使用WCF Service Trace Viewer检查svclog文件,并在该消息日志中找到HTTP请求内容长度:

alt text http://i50.tinypic.com/xfna06.png

答案 1 :(得分:1)

我认为唯一可以获取此信息(或尽可能接近它)的地方将是自定义MessageEncoder,其中包含一个系统提供的信息并记录该信息。

我认为这不是很难做到,但是因为你需要使用自定义绑定来挂钩会很烦人,我想(或者可能有办法将它挂钩行为,不确定)。

可能值得指出的是,这仍然会遗漏一些线上数据,比如HTTP标头,这些数据是由传输发送的,但实际上并不是消息本身的一部分。

答案 2 :(得分:0)

我使用Fiddler获得了邮件大小。这似乎是最不显眼的方式,因为它不需要更改您的应用程序或配置。

只需运行该工具,发出请求并阅读统计信息接收的字节数

您可能需要做的唯一其他事情是解码邮件正文(如果已编码)。检查请求时,会显示一条消息已对响应正文进行编码。点击解码。要做到这一点。