首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

WebService 調用報錯「基礎連接已關閉:遠程主機強迫關閉連接」:網絡阻斷、協議不匹配、服務端異常三大排查方向

     編輯:程式設計綜合問答

錯誤信息解讀

The underlying connection was closed: An unexpected error occurred on a receive.
Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.

含義:**TCP 連接建立後,服務端主動發送 RST 包斷開**,或服務端進程崩潰導致連接重置。非超時、非證書錯誤、非 4xx/5xx HTTP 狀態碼。

三大排查方向

1. 網絡層阻斷(最常見)

  • 防火牆/安全組:服務器入站規則未放行目標端口(如 8040),或出站規則阻攔返回包。
  • 雲廠商安全組/ACL:阿里云/騰訊云/AWS 安全組需額外配置入站端口。
  • 代理/網關/負載均衡:Nginx/HAProxy/ALB 空閒超時 (`proxy_read_timeout`) 切斷長連接,或健康檢查失敗踢除後端。
  • 客戶端 VPN/代理干擾:本地代理軟件(Clash、V2Ray、Fiddler)攔截/修改請求導致服務端拒絕。

驗證:
`telnet 105.211.91.138 8040` / `nc -zv 105.211.91.138 8040` — 能連通說明網絡通,問題在應用層。

2. 協議/綁定不匹配

  • 服務端**未啟用 HTTP 綁定**,而是 `netTcpBinding`/`namedPipeBinding`/`WebSocket`,客戶端卻用 `BasicHttpBinding`/`HttpClient` 請求 → 服務端無法解析,直接斷開。
  • WSDL 地址 (`https://105.211.91.138:8040/esb/webservice`) 返回的 `` 中 `` 端口/協議與實際監聽不一致。

驗證:
- 瀏覽器訪問 WSDL URL,檢查 ``。
- 服務端配置文件 (`web.config`/`app.config`) 核對 ``。
- 用 **SoapUI** 導入 WSDL 測試調用,排除客戶端代碼問題。

3. 服務端進程異常退出

  • 服務端代碼拋出未捕獲異常(`NullReferenceException`、`OutOfMemoryError`、StackOverflow),導致進程崩潰,OS 發送 RST 斷開所有連接。
  • 服務端線程池耗盡、數據庫連接池耗盡、死鎖,導致請求無響應,負載均衡/客戶端超時斷開。

驗證:
- 查看服務端 **事件查看器 (Windows)** / **journalctl /var/log/syslog (Linux)** / **應用日誌 (log4j/Logback/Serilog)**。
- 啟用 WCF 診斷跟蹤 (`system.diagnostics` + `SvcTraceViewer.exe`)。

快速驗證清單

  1. `telnet ip port` 通嗎?
  2. 瀏覽器開 WSDL 能下載嗎?
  3. SoapUI 能調通嗎?
  4. 服務端日誌有異常嗎?
  5. 防火牆/安全組放行了嗎?

代碼層面防禦(.NET 客戶端)

var binding = new BasicHttpBinding(BasicHttpSecurityMode.None); // 或 Transport
binding.SendTimeout = TimeSpan.FromMinutes(2);
binding.ReceiveTimeout = TimeSpan.FromMinutes(2);
binding.MaxReceivedMessageSize = 2147483647;

var endpoint = new EndpointAddress("https://105.211.91.138:8040/esb/webservice");
var client = new YourServiceClient(binding, endpoint);

// 可選:啟用 Keep-Alive 避免空閒斷開
((IChannel)client.InnerChannel).OperationTimeout = TimeSpan.FromMinutes(5);

「telnet 先行,WSDL 核對,日誌為王,SoapUI 驗證」—— WebService 連接重置不再無從下手。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved