[ASP.net] 在 Visual Studio 2022 加入傳統 ASMX Web Service "要求失敗,回應空白" 錯誤與解決方法

2025-09-26

最近在專案中,需要連線到一個舊系統的 ASMX Web Service,網址大概像這樣:

https://xxx.sample.com/service.asmx

結果在 Visual Studio 2022 新增「Web 參考」後,呼叫服務卻一直出現以下錯誤:

要求失敗,回應空白。  

於 System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)  

於 System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)


問題原因

在 VS2022 下,加入傳統 ASMX Web Service 時,工具產生的 Web References 會有兩個常見問題:

URL 被自動降級為 HTTP

原始設定是 https://...,但 VS2022 有時候會莫名產生成 http://...,造成請求錯誤。

遇到重新導向 (Redirect)

有些服務會自動將 http:// 轉址到 https://,結果 .NET 舊版的 SOAP Client 並不一定能正確處理,導致回應失敗。

這就是為什麼會看到「要求失敗,回應空白」的錯誤。

解決方法

手動修改 Web.config

在 VS2022 產生的設定檔中,找到 applicationSettings 區塊,把服務 URL 修正成正確的 https。

範例如下:

<applicationSettings>
  <ShinJaiYuan.Properties.Settings>
    <setting name="ShinJaiYuan_FagoService_sjy" serializeAs="String">
      <value>https://www.sample.com/service.asmx</value>
    </setting>
  </ShinJaiYuan.Properties.Settings>
</applicationSettings>


這樣就能避免呼叫時自動用到 http://

這就這莫名撞牆,網路上沒有找到有效答案,所以想說筆記一下,給有碰到的人 :)


當麻許的碎念筆記 2014 | Donma Hsu Design.