已调大MaxReceivedMessageSize,如何捕获WCF端点返回的数据量?
查看WCF端点返回数据量的实用方法
方法1:服务端直接计算并记录
在WCF服务的业务方法里,对要返回的结果集进行序列化,计算其字节大小后写入日志(文本文件、事件查看器均可),这是最精准的方式,能直接得到WCF实际传输的数据体积。
示例代码:
public YourResultSetType GetSqlData() { // 从SQL获取结果集的逻辑 var result = FetchDataFromSql(); // 序列化结果计算大小 var serializer = new DataContractSerializer(typeof(YourResultSetType)); using (var ms = new MemoryStream()) { serializer.WriteObject(ms, result); long dataSize = ms.Length; // 写入日志,这里以文本日志为例 File.AppendAllText("WcfDataSizeLog.txt", $"[{DateTime.Now}] 返回数据大小:{dataSize} 字节\r\n"); } return result; }
方法2:开启WCF消息日志
通过配置WCF自带的消息日志功能,记录传输的消息详情,再用专门工具查看大小。
在服务端的web.config或app.config中添加如下配置:
<system.diagnostics> <sources> <source name="System.ServiceModel.MessageLogging"> <listeners> <add name="messageLog" type="System.Diagnostics.XmlWriterTraceListener" initializeData="D:\Logs\WcfMessageLog.svclog"/> </listeners> </source> </sources> </system.diagnostics> <system.serviceModel> <diagnostics> <messageLogging logEntireMessage="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="false" maxSizeOfMessageToLog="5000000"/> </diagnostics> </system.serviceModel>
调用端点后,用Visual Studio自带的Service Trace Viewer(路径通常为C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\SvcTraceViewer.exe)打开生成的.svclog文件,找到对应的返回消息,即可查看其大小信息。
方法3:网络抓包工具
针对不同绑定类型选择合适的抓包工具:
- HTTP绑定(如basicHttpBinding、wsHttpBinding):用Fiddler抓包,在会话列表中直接查看响应的
Body Size和Total Size字段,快速获取数据量。 - TCP绑定:用Wireshark过滤服务对应的端口或IP,捕获返回的数据包后累加字节数,得到总传输大小。
方法4:客户端代码计算
如果可以修改客户端代码,在接收结果后对返回数据序列化计算大小:
var serviceClient = new YourServiceClient(); var receivedResult = serviceClient.GetSqlData(); var serializer = new DataContractSerializer(typeof(YourResultSetType)); using (var ms = new MemoryStream()) { serializer.WriteObject(ms, receivedResult); long receivedSize = ms.Length; Console.WriteLine($"接收到的数据大小:{receivedSize} 字节"); } serviceClient.Close();
内容的提问来源于stack exchange,提问作者DanConsultant
相关产品推荐
相关产品推荐

