代码之家  ›  专栏  ›  技术社区  ›  Brent Arias

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

  •  3
  • Brent Arias  · 技术社区  · 14 年前

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

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

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

    这个问题与我先前的研究有关 bandwidth question

    3 回复  |  直到 7 年前
        1
  •  1
  •   tomasr    14 年前

    我认为,唯一有可能获得这些信息(或尽可能接近这些信息)的地方就是定制 MessageEncoder

    我认为这并不难做到,但挂接会很烦人,因为您需要为此使用自定义绑定(或者可能有一种方法可以通过行为将其挂接,我不确定)。

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

        2
  •  7
  •   Glorfindel Randy Levy    5 年前

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

    alt text

        3
  •  0
  •   robasaurus    8 年前

    Fiddler . 这似乎是最不引人注目的方式,因为它不需要更改您的应用程序或配置。

    只需运行工具,发出请求并读取统计数据 接收字节

    您可能需要做的唯一其他事情是解码消息体(如果已编码)。检查请求时会有一条消息 响应体已编码。点击解码。 做这个。