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

Exchange Web Services 间歇性报错 邮件发送连接被远程主机关闭

可能的故障根因
  • TLS协商异常:若10月前后Exchange服务器、中间网络设备侧调整了TLS策略(如禁用TLS1.0/1.1、强制要求TLS1.2及以上版本),而你的WCF服务运行的.NET框架版本低于4.7,默认不会自动优先使用高版本TLS,会随机出现TLS握手失败被远端强制断连的情况。你提到的无已知变更可能是运维侧隐性调整未同步,或是系统安全补丁自动更新了TLS默认配置导致。
  • Exchange EWS限流触发:Exchange默认对EWS接口配置了限流策略,包括单账号并发请求数、每分钟最大请求量、并发连接数上限,当业务高峰期请求量突增触及阈值时,Exchange会主动断开超额的连接,符合你描述的集中报错、峰值过后自动恢复的特征。
  • 中间网络设备会话超时:服务器到Exchange之间的防火墙、负载均衡、WAF等设备,默认会对长时间空闲的TCP会话进行强制断连,而EWS默认会复用TCP连接,如果连接空闲超过设备的超时阈值,下次复用的时候就会被远端强制拒绝,触发报错。
  • 端口/连接池耗尽:你的代码每次发邮件都新建ExchangeService实例,若没有主动释放连接资源,高并发下会导致本地端口耗尽,或是到Exchange的并发连接数超过系统上限,出现间歇性断连。
排查方向
  • 确认WCF服务的.NET框架版本及全局TLS配置:查看项目的目标框架版本,若低于4.7,可先在程序启动入口添加全局TLS配置代码,验证问题是否解决:ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13; 注意该代码需要放在所有ExchangeService初始化逻辑之前。
  • 核查Exchange服务器限流日志:请Exchange管理员查看发信用服务账号的EWS限流日志,确认报错时间段是否有EWSMaxConcurrency、EWSPercentTimeInAD、EWSPercentTimeInCAS等限流指标触发的记录。
  • 抓包确认断连来源:在报错时间段同时在WCF服务器和Exchange服务器抓TCP包,查看RST断连包是哪一侧发出的,如果是中间网络设备发出,调整对应设备的TCP会话超时时间,建议调至大于等于Exchange的默认KeepAlive时间(30分钟)。
  • 监控本地服务器端口使用情况:报错时间段执行netstat -ano统计到Exchange服务器443端口的连接数,确认是否出现TIME_WAIT状态连接堆积、端口耗尽的情况。
可行的修复方案

代码层面优化

  • 复用ExchangeService实例,不要每次发邮件都新建实例,减少TCP握手开销和连接占用。
  • 增加重试机制:对ServiceRequestException、WebException这类网络异常增加指数退避重试逻辑,重试3-5次即可解决大部分临时性断连问题。
  • 显式配置连接参数:给ExchangeService实例增加超时配置,同时调整ServicePoint的TCP保活参数:
// 配置ExchangeService超时
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013);
service.Timeout = 30000;
service.Credentials = new WebCredentials(networkUserName, networkPassword, networkDomain);
service.Url = new Uri(exchangeServerUri);

// 配置ServicePoint参数
var servicePoint = ServicePointManager.FindServicePoint(service.Url);
servicePoint.SetTcpKeepAlive(true, 120000, 20000);
servicePoint.ConnectionLeaseTimeout = 60000;
servicePoint.MaxIdleTime = 30000;

服务端配置调整

  • 若确认是限流触发,让Exchange管理员调整对应服务账号的EWS限流策略,适当提高并发和请求量阈值。
  • 若确认是网络设备超时,调整防火墙/负载均衡的TCP会话超时时间到30分钟以上。

依赖升级

如果当前.NET框架版本低于4.7,升级到4.7.2及以上版本,默认开启TLS1.2+协商,无需手动配置SecurityProtocol参数。

内容的提问来源于stack exchange,提问作者Ryan Raten Kuhar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:30:02