You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已调大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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 18:35:50