2010-05-25 144 views
3

虽然我正在向WCF调用SOAP或REST调用,但我希望在任一端(客户端和服务器)上都有通道堆栈记录线上收到的数据大小。所以我猜我需要在通道堆栈的任何一边添加一个自定义行为。也就是说,在服务器端,我会记录收到的IP头广告大小(累计,直到接收到该消息的所有数据包)。在客户端,我会记录从服务器返回的IP头广告大小(相同的求和过程)。WCF中的消息大小“在线”WCF中的消息大小

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

总之,没有人有任何进一步的洞察信息是否以及如何访问?作为常规业务逻辑调用的一部分,我必须证明这个“规模”数据将在生产环境中收集。因此我对solutions proposed elsewhere不感兴趣。

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

+0

我不确定您可以使用WCF轻松访问传输协议(TCP)。但是,收集实际的有效载荷大小应该相当容易。那是你的追求? – Strelok 2010-05-26 02:13:41

+0

我会解决有效载荷的大小,如果这是我能得到的(我可能会添加估计的线上开销大小,以包括数据包大小的其余部分)。 – 2010-05-26 02:30:45

回答

1

我认为唯一可以获得此信息(或尽可能接近它)的地方是自定义MessageEncoder,它包装了一个系统提供的信息并记录了这些信息。我认为,这样做不会很困难,但是如果您需要使用自定义绑定,我认为(或者可能有一种方法将其与一种行为,不确定)。

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

8

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

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

+0

由于我将尝试在生产环境中捕获此信息,因此我将无法打开跟踪功能。但是,如果我可以从我添加的自定义行为中收集相同的“Content-Length”,那么这可能就是我需要的。 – 2010-05-26 17:01:19

+2

这只适用于使用HTTP绑定的情况。 – markmnl 2014-03-28 07:57:18

0

我用Fiddler得到的消息大小。这似乎是最不显眼的方式,因为它不需要更改您的应用或配置。

只需运行该工具,使请求和读统计接收的字节

你可能必须做的,如果它的编码解码是邮件正文唯一的其他东西。当检查请求时,会有一条消息响应主体被编码。点击解码。要做到这一点。