2010-01-21 35 views
0

我想调试为什么我的应用程序使用下面的WCF发送这么多的数据。我试图检查WCF跟踪日志并使用Fiddler检查流量,但是我需要一个堆栈跟踪导致有问题的客户端代码。WCF运行时堆栈中的最低拦截点是什么?

因此,我安装了一个自定义IClientMessageInspector,但是如何知道给定Message实例的实际数据的大小?给定的Message实例的ToString()返回一个XML,但我不确定它的大小是否是它。

有没有办法挂钩到WCF堆栈甚至更深,更接近实际的消息发送?

UPDATE

发现这太问题1岁,有趣,但没有人回答了这个问题 - https://stackoverflow.com/questions/457683/message-size-after-serialize

+0

你能添加一个行为给你的主机,而不是你的客户吗? –

+0

是的,我可以,我开始与客户端,但我可以对服务器也一样。 – mark

+0

发送大消息结果在客户端有异常吗?这个异常有一个堆栈跟踪,是不是你在找什么? –

回答

1

你提到跟踪日志 - 但你启用消息记录?有了这个,你应该清楚地看到底层的消息,所以你应该能够看到究竟是什么数据在线上?

+0

我也希望堆栈跟踪,现场优先。 – mark

+0

@mark - 但在什么时候?你提到的消息大小 - 这是一个运输问题,而不是客户/服务器问题......? –

+0

感谢您的澄清,有没有办法挂钩到运输中,看看准确传输了什么?还是IClientMessageInspector和IDispatchMessageInspector够了?虽然,我不知道如何获得给定的消息实例的长度... – mark

0

您可以使用消息拦截器,但请注意“消息的正文只能被使用......一次”(请参阅​​msdn)。

实质上,您需要使用Message.CreateBufferedCopy()来创建消息副本,以便随意处理,包括调用ToString()将其转储到某处。另外,当消息拦截器被链接时,你可能看不到原始消息,而是前一个拦截器创建/更改的消息。正如马克已经说过的,如果你真的只想看看网络上的内容,那么你可能更适合内置WCF tracing

+0

我知道跟踪设施,但我想在实时调试会话期间检查实际消息。 – mark