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

  • 1424
  • 0

最近在專案中,需要連線到一個舊系統的 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

範例如下:

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

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

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

---

請你暫時把你的勇氣給我 在夢想快消失的時候 讓我的 Code 用力的穿過天空 為愛我的人做一秒英雄 如果這篇文章有幫助到您,簡單留個言,或是幫我按個讚,讓我有寫下去的動力…

Yesterday I wrote down the code. I bet I could be your hero. I am a mighty little programmer.