當您嘗試在建置在.NET Framework 1.1 Service Pack 1 的應用程式中進行 HTTP 要求時,收到一或多個錯誤訊息

文章翻譯 文章翻譯
文章編號: 915599 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

本文將告訴您當您使用 Microsoft.NET Framework 1.1 Service Pack 1 (SP1) 時,可能會收到錯誤訊息來產生 HTTP 要求或當您呼叫一個 Web 服務。

徵狀

當想在.NET Framework 建置的應用程式中進行 HTTP 要求可能會收到一或多個下列的錯誤訊息:
錯誤訊息 1
基礎連線已關閉: 無法連線到遠端伺服器。
錯誤訊息 2
基礎連線已關閉: 上一個傳送時發生意外的錯誤。
錯誤訊息 3
基礎連線已關閉: 上接收時發生意外的錯誤。
錯誤訊息 4
基礎連線已關閉: 伺服器認可 HTTP 通訊協定違規。
錯誤訊息 5
基礎連線已關閉: 找不建立 SSL/TLS 安全通道。
錯誤訊息 6
作業已逾時

發生的原因

錯誤訊息 1

當.NET Framework 無法建立到遠端伺服器連線時,就會發生這個問題。當一個時,可能就會發生這個問題或多個下列條件,則為 True:
  • 網路中斷,就會發生。
  • Proxy 伺服器封鎖 HTTP 要求。
  • 發生網域名稱系統 (DNS) 問題。
  • 發生網路驗證問題。
若要解決這個問題,請參閱解決方案 A、 B 和 C。

錯誤訊息 2

當用戶端電腦無法傳送的 HTTP 時,就會發生這個問題的要求。用戶端電腦無法傳送 HTTP 要求,因為連接已關閉或無法使用。用戶端電腦會傳送大量資料時,可能就會發生這個問題。若要解決這個問題,請參閱解析度 A、 D、 E、 F 及單

錯誤訊息 3

當伺服器或其他網路裝置意外關閉現有的傳輸控制通訊協定 (TCP) 連線時,就會發生這個問題。 逾時值在伺服器上或網路裝置上設定太低時,可能就會發生這個問題。若要解決這個問題,請參閱解析度 A、 D、 E、 F 及單問題可能也會發生當如果伺服器重設連接意外地,例如 if 未處理的例外狀況機伺服器處理序。 分析伺服器記錄檔來查看是否這可能是問題。

錯誤訊息 4

當.NET Framework 會偵測到伺服器回應並未遵守 HTTP 1.1 RFC 時,就會發生這個問題。當回應包含不正確的標頭或不正確的標頭分隔符號時,可能會發生這個問題。若要解決這個問題,請參閱解決方案 A 和 G.

如需有關 HTTP 標頭的詳細資訊,請造訪下列全球資訊網協會網站:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6
Microsoft 提供協力廠商連絡資訊可協助您尋找技術支援。 此連絡人資訊若有變更恕不另行通知。Microsoft 不保證此第三方連絡資訊的正確性。

錯誤訊息 5

當一個時,可能就會發生這個問題或多個下列條件,則為 True:
  • 您正在使用一個不正確的用戶端憑證或有無效的伺服器憑證。
  • 您遇到的 TCP 連線發生問題。
  • 用戶端電腦正在傳送大量資料。
  • 等候逾時設定值在伺服器上,或者在其他網路裝置設得太低。
  • 您遇到的 HTTPS 通訊協定相容性問題。
TCP 連線問題請參閱解析度 A、 D、 E、 F 及單 用戶端憑證問題] 和 [伺服器憑證問題,請參閱解決方式 H 和 I。HTTPS 通訊協定相容性問題請參閱解析 J.

錯誤訊息 6

發生下列情況之一發生之前,到達用戶端逾時值時,就會發生這個問題:
  • 已建立 HTTP 連線。
  • 從伺服器收到 HTTP 回應。
  • 資料流完全寫入或讀取。
若要解決這個問題,請參閱解決方案 A、 E、 K、 L、 M 和 N。

解決方案

附註下列清單包含可能的解決方法,其中一個這些問題發生時可能會套用。並非所有的解析度套用到這些問題。請參閱 < 原因 > 一節來判斷哪一種解析度套用中的問題描述。

解析度 A

若要解決這個問題,請確定您使用.NET Framework 的最新的版本。 如需詳細資訊,請按一下下列的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
318785如何判斷.NET Framework 版本時才安裝,是否已經套用 Service Pack

解析度 B

若要解決這個問題,請確定 Proxy 設定正確。若要執行此動作採用下列方法:

解析度 C

若要解決這個問題,請確定應用程式有權限,才能進行網路呼叫,並讓通訊端呼叫。當使 HttpWebRequest 呼叫在應用程式執行 Web 應用程式內可套用於此解析度。您可能要授與讀取權限可以在 ASPNET 帳戶,讓您可以存取下列資源:
  • Microsoft WinSockProxy WS2.0 提供者 (Wspwsp.dll) 檔案
  • HKLM\System\CurrentControlSet\Services\DnsCache
    登錄機碼
  • HKLM\System\CurrentControlSet\Services\WinSock2
    登錄機碼
附註如果要判斷 ASPNET 工作者處理序是否具有必要的權限,使用 [FileMon 公用程式和 RegMon 公用程式]。如果要下載 FileMon 公用程式和 RegMon 公用程式,請造訪下列 Sysinternals 網站]:
http://technet.microsoft.com/en-us/sysinternals/default.aspx
在本文所討論的協力廠商產品是由 Microsoft 以外的公司所製造的。Microsoft 可讓不以暗示或其他方式,效能或可靠性這些產品的保證。

解析度 D

如果要解決這個問題,停用持續作用的功能]。在.NET] Framework 請將 HttpWebRequest.KeepAlive 屬性設定為 FALSE。如果要呼叫 Web 服務時,請執行這項操作,請依照下列步驟執行。

附註「 持續作用的功能都需要 NTLM 驗證。
  1. 建立新類別,藉由從產生的 Proxy 類別繼承。
  2. 將方法加入至類別能夠覆寫 GetWebRequest 方法。這項變更可讓您存取 HttpWebRequest 物件。如果您使用的 Microsoft Visual C#,新的方法必須是類似於
    class MyTestService:TestService.TestService
    {
        protected override WebRequest GetWebRequest(Uri uri)
        {
            HttpWebRequest webRequest = (HttpWebRequest) base.GetWebRequest(uri);
            //Setting KeepAlive to false
            webRequest.KeepAlive = false;
            return webRequest;
        }
    }
    如果您使用 Microsoft Visual Basic.NET,新的方法必須是類似於下列
    Class MyTestService 
         Inherits TestService.TestService
            Protected Overrides Function GetWebRequest(ByVal uri As Uri) As System.Net.WebRequest
                Dim webRequest As System.Net.HttpWebRequest
                webRequest = CType(MyBase.GetWebRequest(uri), System.Net.HttpWebRequest)
               'Setting KeepAlive to false 
                webRequest.KeepAlive = False
                GetWebRequest = webRequest
            End Function
    End Class
    下列。
  3. 建立新類別的執行個體,然後使用新的類別來呼叫 Web 服務方法。

解析度 E

如果要解決這個問題,請將 ServicePointManager.MaxServicePointIdleTime 屬性設定成小於一個伺服器持續作用連線的逾時值。

備忘稿
  • 當一個 ServicePoint 物件已經閒置 MaxIdleTime 屬性中指定的時間時,則適合進行記憶體回收。
  • 請確定 ServicePointManager.MaxServicePointIdleTime 屬性設定做任何 HTTP 要求之前。如需有關 ServicePointManager.MaxSercvePointIdleTime 屬性的詳細資訊,請造訪下列 Microsoft 網站]:
    http://msdn2.microsoft.com/en-us/library/system.net.servicepointmanager.maxservicepointidletime(vs.71).aspx

解析度 F

若要解決這個問題,增加逾時值在伺服器電腦和其他網路裝置上。若要增加逾時值在 Microsoft 網際網路資訊服務 (IIS) 6.0,請依照下列步驟執行:
  1. 按一下 [開始],依序按一下 [控制台]、 按一下 [系統管理工具,然後再按一下 [網際網路資訊服務 (IIS) 管理員]。
  2. 按一下您想要重新設定,電腦的名稱,然後按一下 [網站]
  3. 您想要重新設定的網站上按一下滑鼠右鍵,再按 [內容]。
  4. 連線逾時 鍵入新的數值方塊,然後再按一下 [確定]
  5. 按一下 [檔案] 功能表 的 [結束

解析度 G

如果要解決這個問題,將 useUnsafeHeaderParsing為 True。如需有關 useUnsafeHeaderParsing 屬性,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
888528在.NET Framework 1.1 Service Pack 1 中修正,但不個別微軟知識庫文件中其他地方描述 Bug 的清單

解析度 H

若要解決這個問題,提供應用程式的有效的用戶端憑證。 如更多有關如何使用用戶端憑證的資訊,按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中 「 文件:
901183如何在 ASP.NET Web 應用程式中的驗證使用用戶端憑證呼叫 Web 服務
895971如何利用 HttpWebRequest 和 HttpWebResponse 類別 Microsoft Visual C#.NET 中傳送用戶端憑證

解析度我

若要解決這個問題,提供之伺服器的有效的安全性憑證。此外,您可能可以解決這個問題,安裝根憑證授權單位 (CA) 憑證或修正的伺服器憑證一般名稱。如需有關命名伺服器憑證的資訊,按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
813618安全性警告: 安全性憑證的名稱無效或不符合網站名稱
警告這項因應措施可能會使您的電腦] 或 [網路更容易遭受] 攻擊惡意使用者或惡意軟體 (例如病毒)。我們不建議這項因應措施,但會提供這項資訊,如此您可以在您自己慎重實作這項因應措施。這項因應措施您必須承擔使用自己的風險。

您也可以修訂應用程式程式碼,以略過這些憑證警告。若要執行此動作實作您自己 ICertificatePolicy 介面。然後,您可以設定 ServicePointManager.CertificatePolicy 屬性來使用的 Web 服務方法呼叫之前您憑證原則的執行個體。

附註ICertificatePolicy.CheckValidationResult 方法會實作應用程式憑證驗證原則。 如需有關 ICertificatePolicy.CheckValidationResult 方法的詳細資訊,請造訪下列 Microsoft 網站]:
http://msdn2.microsoft.com/en-us/library/system.net.icertificatepolicy.checkvalidationresult(vs.71).aspx
如程式碼範例和詳細資訊,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
823177PRB:"System.Net.WebException。基礎連線已關閉。無法建立與遠端伺服器的信任關係 」 時,出現錯誤訊息升級.NET Framework
重要我們建議您不忽略因為可能的安全性風險的程式碼中的 SSL 憑證警告。

解析度 J

如果要解決這個問題,變更 HTTPS 通訊協定從 SSL 傳輸層級安全性 (TLS)。

附註如果您已經使用 TLS,變更 SSL HTTPS 通訊協定。若要將 HTTPS 通訊協定,用戶端電腦上的請參閱 「 ServicePointManager.SecurityProtocol 屬性 」 一節,下列 Microsoft 網站:
http://msdn2.microsoft.com/en-us/library/system.net.servicepointmanager.securityprotocol.aspx
附註例如,以支援 SSL3 通訊協定和 TLS1 通訊協定,使用類似於的程式碼下列。
ServicePointManager.SecurityProtocol= SecurityProtocolType.Ssl3|SecurityProtocolType.Tls;
如需有關如何變更 HTTPS 通訊協定,在伺服器電腦上的詳細資訊,按一下 [下列面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
187498如何停用 PCT 1.0]、 [SSL 2.0]、 [SSL 3.0] 或 [網際網路資訊服務] 中的 TLS 1.0

解析度 K

若要解決這個問題,增加 maxConnection 屬性的值。執行這項操作,修改應用程式組態檔或新增應用程式的程式碼。

附註maxConnection 屬性的預設值是 2。對於 Microsoft ASP.NET 連接的應用程式呼叫 Web 服務,我們建議您設定值為 12 次的處理器數目。若要使用應用程式的程式碼來設定此值,使用 ServicePointManager.DefaultConnectionLimit 屬性。如需有關 ServicePointManager.DefaultConnectionLimit 屬性的詳細資訊,請造訪下列 Microsoft 網站]:
http://msdn2.microsoft.com/en-us/library/system.net.servicepointmanager.defaultconnectionlimit(vs.71).aspx
若要設定這個值,藉由使用組態檔的應用程式,將下列程式碼加入至組態檔
<connectionManagement>
  <add address="*" maxconnection="12"/>
</connectionManagement>
如需有關如何使用 <connectionmanagement> 項目,請造訪下列 Microsoft 網站:
http://msdn2.microsoft.com/en-us/library/aa903351(VS.71).aspx

解析度 L

若要解決這個問題,請確定正確實作等候逾時設定在伺服器和其他網路裝置上。如需有關如何實作等候逾時設定的詳細資訊,按一下 [下列面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
904262HttpWebRequest 類別所傳送的要求可能會停止回應,當您在 ASP.NET 應用程式中使用 HttpWebRequest 類別

解析度 M

如果要解決這個問題,閱讀 ASP.NET 效能調整。如 ASP.NET 效能調整的更多有關,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
821268爭用、 效能不佳和死結,當您從 ASP.NET 應用程式的 Web 服務要求

解析 N

若要解決這個問題,增加用戶端應用程式程式碼中的 [逾時] 屬性的值。若要執行此動作使用下列屬性:
  • HttpWebRequest.Timeout
  • HttpWebRequest.ReadWriteTimeout
如需有關 HttpWebRequest.Timeout 屬性的詳細資訊,請造訪下列 Microsoft 網站]:
http://msdn2.microsoft.com/en-us/library/cy9yd268.aspx
如需有關 HttpWebRequest.ReadWriteTimeout 屬性的詳細資訊,請造訪下列 Microsoft 網站]:
http://msdn2.microsoft.com/en-us/library/b1w9c0s4.aspx

解析度 O

如果要解決這個問題,確定用戶端電腦不會傳送 HTTP 100-繼續標頭。此外,請確定用戶端電腦並不預期要接收 HTTP 100-繼續標頭。

附註此解決方法是有效如果 Web 伺服器或 Proxy 伺服器不支援 HTTP 100-繼續標頭。如需有關如何停用 HTTP 100-繼續用戶端電腦的標頭,請造訪下列 Microsoft 網站:
http://msdn2.microsoft.com/en-us/library/system.net.servicepointmanager.expect100continue.aspx

?考

如需有關效能考量,當您進行 Web 服務呼叫從 ASP.NET 連線應用程式,請造訪下列 Microsoft 網站的詳細資訊:
http://msdn2.microsoft.com/en-us/library/aa480507.aspx
如需有關效能問題和死結問題,當您進行 Web 服務要求從 ASP.NET 連線應用程式,請按一下下列文章編號,檢視 「 Microsoft 知識庫 」 中的發行項的詳細資訊:
821268爭用、 效能不佳和死結,當您從 ASP.NET 應用程式的 Web 服務要求
如需有關如何改善 ASP.NET 連線應用程式效能的詳細資訊,請造訪下列 Microsoft 網站]:
http://msdn2.microsoft.com/en-us/library/ms998549.aspx
如需有關如何改善效能的 Web 服務,請造訪下列 Microsoft Web 網站:
http://msdn2.microsoft.com/en-us/library/ms998562.aspx
如需有關如何建置安全的 ASP.NET 連線應用程式的詳細資訊,請造訪下列 Microsoft 網站]:
http://msdn2.microsoft.com/en-us/library/aa302408.aspx
附註TCP 傳輸通訊協定用於 HTTP 要求。TCP 是可靠的連線導向通訊協定。不過,如果意外關閉 TCP 連線,應用程式重試要求。請 TCP 的相關資訊通訊協定和關於用戶端行為如果伺服器關閉一個連線造訪下列全球資訊網協會網站:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.2.4
Microsoft 提供協力廠商連絡資訊可協助您尋找技術支援。 此連絡人資訊若有變更恕不另行通知。Microsoft 不保證此第三方連絡資訊的正確性。 如需有關 FileMon 公用程式和 RegMon 公用程式,按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
198038封裝和部署問題的有用工具
如更多有關網路監視器 」 的資訊,按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中 「 文件:
148942如何擷取網路流量與網路監視器
812953 如何使用網路監視器擷取網路資料傳輸

屬性

文章編號: 915599 - 上次校閱: 2009年2月8日 - 版次: 2.2
這篇文章中的資訊適用於:
  • Microsoft .NET Framework 1.1 Service Pack 1
關鍵字:?
kbmt kbtshoot kbprb KB915599 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:915599
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com