当我向WCF进行SOAP或REST调用时,我希望两端的通道堆栈(客户端和服务器)记录接收数据的线上大小。所以我猜我需要在两侧的通道堆栈中添加自定义行为。也就是说,在服务器端,我将记录收到的IP报头通告大小(累计,直到收到该消息的所有数据包)。在客户端,我将记录从服务器返回的IP标头广告大小(相同的求和过程)。
但这预先假定此信息对于通道堆栈级别的自定义WCF行为是可见的。也许它只在ASP.NET级别(在WCF下面的一层)可见?或者也许WCF已经收集了这个“总消息大小”信息,我可以简单地访问一个属性?
简而言之,是否有人进一步了解这些信息是否以及如何获取?作为常规业务逻辑调用的一部分,我必须证明这个“大小”数据将在生产环境中收集。因此,我对solutions proposed elsewhere不感兴趣。
这个问题与我之前的bandwidth question有关。
答案 0 :(得分:7)
如果您set up WCF tracing and message logging,您可以使用WCF Service Trace Viewer检查svclog文件,并在该消息日志中找到HTTP请求内容长度:
答案 1 :(得分:1)
我认为唯一可以获取此信息(或尽可能接近它)的地方将是自定义MessageEncoder,其中包含一个系统提供的信息并记录该信息。
我认为这不是很难做到,但是因为你需要使用自定义绑定来挂钩会很烦人,我想(或者可能有办法将它挂钩行为,不确定)。
可能值得指出的是,这仍然会遗漏一些线上数据,比如HTTP标头,这些数据是由传输发送的,但实际上并不是消息本身的一部分。
答案 2 :(得分:0)
我使用Fiddler获得了邮件大小。这似乎是最不显眼的方式,因为它不需要更改您的应用程序或配置。
只需运行该工具,发出请求并阅读统计信息接收的字节数
您可能需要做的唯一其他事情是解码邮件正文(如果已编码)。检查请求时,会显示一条消息已对响应正文进行编码。点击解码。要做到这一点。