.NET Framework 1.1 서비스 팩 1에 작성된 응용 프로그램에서 HTTP 요청을 하려고 하면 하나 이상의 오류 메시지가 나타난다

기술 자료 번역 기술 자료 번역
기술 자료: 915599 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

요약

이 문서에서는 Microsoft .NET Framework 1.1 서비스 팩 1(SP1)을 사용하여 HTTP 요청을 하거나 웹 서비스를 호출할 때 나타날 수 있는 오류 메시지에 대해 설명합니다.

현상

.NET Framework에 작성된 응용 프로그램에서 HTTP 요청을 하려고 하면 다음 오류 메시지 중 하나 이상이 나타날 수 있습니다.
오류 메시지 1
기본 연결이 닫혔습니다. 원격 서버에 연결할 수 없습니다.
오류 메시지 2
기본 연결이 닫혔습니다. 보내기에서 예기치 않은 오류가 발생했습니다.
오류 메시지 3
기본 연결이 닫혔습니다. 받기에서 예기치 않은 오류가 발생했습니다.
오류 메시지 4
기본 연결이 닫혔습니다. 서버에서 HTTP 프로토콜 위반이 커밋되었습니다.
오류 메시지 5
기본 연결이 닫혔습니다. SSL/TLS용 보안 채널을 설정할 수 없습니다.
오류 메시지 6
작업 시간을 초과했습니다.

원인

오류 메시지 1

이 문제는 .NET Framework가 원격 서버와의 연결을 설정할 수 없을 때 발생합니다. 다음 조건 중 하나 이상에 해당하면 이 문제가 발생할 수 있습니다.
  • 네트워크 장애가 발생합니다.
  • 프록시 서버가 HTTP 요청을 차단합니다.
  • DNS(Domain Name System) 문제가 발생합니다.
  • 네트워크 인증 문제가 발생합니다.
이 문제를 해결하려면 해결 방법 A, B 및 C를 참조하십시오.

오류 메시지 2

이 문제는 클라이언트 컴퓨터가 HTTP 요청을 보낼 수 없을 때 발생합니다. 연결이 닫혔거나 사용할 수 없으므로 클라이언트 컴퓨터가 HTTP 요청을 보낼 수 없습니다. 클라이언트 컴퓨터가 너무 많은 데이터를 보내는 경우 이러한 문제가 발생할 수 있습니다. 이 문제를 해결하려면 해결 방법 A, D, E, F 및 O를 참조하십시오.

오류 메시지 3

이 문제는 서버 또는 다른 네트워크 장치가 기존 TCP(전송 제어 프로토콜) 연결을 예기치 않게 닫을 경우 발생합니다. 또한 서버나 네트워크 장치의 시간 제한 값이 너무 낮게 설정된 경우에도 이 문제가 발생할 수 있습니다. 이 문제를 해결하려면 해결 방법 A, D, E, F 및 O를 참조하십시오.

오류 메시지 4

이 문제는 서버 응답이 HTTP 1.1 RFC를 준수하지 않음을 .NET Framework에서 발견한 경우 발생합니다. 이 문제는 응답에 잘못된 헤더 또는 잘못된 헤더 구분 기호가 포함된 경우 발생할 수 있습니다. 이 문제를 해결하려면 해결 방법 A 및 G를 참조하십시오.

HTTP 헤더에 대한 자세한 내용은 다음 W3C(World Wide Web 컨소시엄) 웹 사이트를 참조하십시오.
http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6
이 문서에 포함된 타사의 연락처 정보는 기술 지원을 받는 데 도움을 주기 위한 것입니다. 이 연락처 정보는 예고 없이 변경될 수 있습니다. Microsoft는 이러한 타사 연락처 정보의 정확성을 보증하지 않습니다.

오류 메시지 5

다음 조건 중 하나 이상에 해당하면 이 문제가 발생할 수 있습니다.
  • 잘못된 클라이언트 인증서 또는 잘못된 서버 인증서를 사용하고 있습니다.
  • TCP 연결 문제가 발생했습니다.
  • 클라이언트 컴퓨터가 너무 많은 데이터를 보내고 있습니다.
  • 서버 또는 다른 네트워크 장치의 시간 제한이 너무 낮게 설정되어 있습니다.
  • HTTPS 프로토콜 호환성 문제가 발생했습니다.
TCP 연결 문제인 경우 해결 방법 A, D, E, F 및 O를 참조하십시오. 클라이언트 인증서 문제 및 서버 인증서 문제인 경우에는 해결 방법 H 및 I를 참조하십시오. HTTPS 프로토콜 호환성 문제인 경우에는 해결 방법 J를 참조하십시오.

오류 메시지 6

이 문제는 다음 조건 중 하나가 발생하기 전에 클라이언트 시간 제한 값에 도달한 경우 발생합니다.
  • HTTP 연결이 설정되었습니다.
  • 서버로부터 HTTP 응답을 받았습니다.
  • 데이터 스트림을 완전히 쓰거나 읽었습니다.
이 문제를 해결하려면 해결 방법 A, E, K, L, M 및 N을 참조하십시오.

해결 방법

참고 다음은 이러한 문제가 발생할 경우 적용할 수 있는 해결 방법입니다. 문제에 따라 적용 가능한 해결 방법이 다릅니다. 어떤 해결 방법을 적용할 수 있는지 보려면 "원인" 절의 문제 설명을 참조하십시오.

해결 방법 A

이 문제를 해결하려면 사용하고 있는 .NET Framework가 최신 버전인지 확인합니다. 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
318785 설치된 .NET Framework의 버전 및 서비스 팩이 적용되었는지 여부를 확인하는 방법

해결 방법 B

이 문제를 해결하려면 프록시 설정이 올바른지 확인합니다. 이렇게 하려면 다음 방법을 사용하십시오.

해결 방법 C

이 문제를 해결하려면 네트워크 호출 및 소켓 호출 권한이 응용 프로그램에 있는지 확인합니다. 이 해결 방법은 HttpWebRequest 호출을 하는 응용 프로그램이 웹 응용 프로그램 내부에서 실행되는 경우에 적용됩니다. 다음 리소스에 액세스할 수 있도록 읽기 권한을 ASP.NET 계정에 부여해야 할 수도 있습니다.
  • Microsoft WinSockProxy WS2.0 Provider(Wspwsp.dll) 파일
  • HKLM\System\CurrentControlSet\Services\DnsCache
    레지스트리 키
  • HKLM\System\CurrentControlSet\Services\WinSock2
    레지스트리 키
참고 필요한 권한이 ASP.NET 작업자 프로세스에 있는지 확인하려면 FileMon 유틸리티 및 RegMon 유틸리티를 사용하십시오. FileMon 유틸리티 및 RegMon 유틸리티를 다운로드하려면 다음 Sysinternals 웹 사이트를 방문하십시오.
http://www.microsoft.com/technet/sysinternals/default.mspx(영문)
이 문서에 나와 있는 타사 제품은 Microsoft와 무관한 회사에서 제조한 것입니다. Microsoft는 이러한 제품의 성능이나 신뢰성에 관하여 명시적이든 묵시적이든 어떠한 보증도 하지 않습니다.

해결 방법 D

이 문제를 해결하려면 Keep-alive 기능을 사용하지 않도록 설정합니다. .NET Framework에서 HttpWebRequest.KeepAlive 속성을 FALSE로 설정합니다. 이렇게 하려면 웹 서비스를 호출할 때 다음과 같이 하십시오.

참고 Keep-alive 기능은 NTLM 인증에 필요합니다.
  1. 생성된 프록시 클래스를 상속하여 새 클래스를 만듭니다.
  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. 새 클래스의 인스턴스를 만들고 새 클래스를 사용하여 웹 서비스 메서드를 호출합니다.

해결 방법 E

이 문제를 해결하려면 ServicePointManager.MaxServicePointIdleTime 속성을 서버의 Keep-alive 연결에 대한 시간 제한 값보다 작게 설정합니다.

참고

해결 방법 F

이 문제를 해결하려면 서버 컴퓨터 및 다른 네트워크 장치의 시간 제한 값을 늘립니다. Microsoft Internet Information Services(IIS) 6.0에서 시간 제한 값을 늘리려면 다음과 같이 하십시오.
  1. 시작, 제어판, 관리 도구를 차례로 누른 다음 인터넷 정보 서비스(IIS) 관리를 누릅니다.
  2. 다시 구성하려는 컴퓨터의 이름을 누르고 웹 사이트를 누릅니다.
  3. 다시 구성하려는 웹 사이트를 마우스 오른쪽 단추로 누른 다음 속성을 누릅니다.
  4. 연결 시간 제한 상자에 새 값을 입력하고 확인을 누릅니다.
  5. 파일 메뉴에서 끝내기를 누릅니다.

해결 방법 G

이 문제를 해결하려면 useUnsafeHeaderParsingTrue로 설정합니다. useUnsafeHeaderParsing 속성에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
888528 .NET Framework 1.1 서비스 팩 1에서 해결되었지만 Microsoft 기술 자료에서 별도의 문서로 설명되지 않은 버그 목록

해결 방법 H

이 문제를 해결하려면 응용 프로그램에 대해 유효한 클라이언트 인증서를 제공합니다. 클라이언트 인증서를 사용하는 방법에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
901183 ASP.NET 웹 응용 프로그램에서 인증을 위해 클라이언트 인증서를 사용하여 웹 서비스를 호출하는 방법
895971 Microsoft Visual C# .NET의 HttpWebRequest 및 HttpWebResponse 클래스를 사용하여 클라이언트 인증서를 보내는 방법

해결 방법 I

이 문제를 해결하려면 서버에 대해 유효한 보안 인증서를 제공합니다. 또는 루트 인증 기관(CA) 인증서를 설치하거나 서버 인증서의 공통 이름을 수정하여 이 문제를 해결할 수도 있습니다. 서버 인증서 이름 지정에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
813618 보안 경고: 보안 인증서 이름이 유효하지 않거나 사이트 이름과 일치하지 않는다
경고 이 해결 방법으로 인해 컴퓨터나 네트워크가 악의적인 사용자나 바이러스 같은 악성 소프트웨어의 공격에 취약해질 수 있습니다. 따라서 이 방법을 권장하지는 않지만 사용자의 판단에 따라 구현할 수 있도록 정보를 제공하고 있습니다. 이 해결 방법의 사용에 따른 모든 책임은 사용자에게 있습니다.

이 인증서 경고를 무시하도록 응용 프로그램 코드를 수정할 수도 있습니다. 이렇게 하려면 ICertificatePolicy 인터페이스를 직접 구현합니다. 그런 다음 웹 서비스 메서드 호출이 이루어지기 전에 자체 인증서 정책 인스턴스를 사용하도록 ServicePointManager.CertificatePolicy 속성을 설정할 수 있습니다.

참고ICertificatePolicy.CheckValidationResult 메서드는 응용 프로그램 인증서 유효성 검사 정책을 구현합니다. ICertificatePolicy.CheckValidationResult 메서드에 대한 자세한 내용은 다음 Microsoft 웹 사이트를 참조하십시오.
http://msdn.microsoft.com/library/kor/default.asp?url=/library/KOR/cpref/html/frlrfSystemNetICertificatePolicyClassCheckValidationResultTopic.asp
코드 예제에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
823177 PRB: .NET Framework를 업그레이드할 때 "System.Net.WebException. 기본 연결이 닫혔습니다. 원격 서버와 트러스트 관계를 설정할 수 없습니다." 오류 메시지가 표시된다
중요 보안 위험이 발생할 수 있으므로 코드의 SSL 인증서 경고는 무시하지 않는 것이 좋습니다.

해결 방법 J

이 문제를 해결하려면 SSL의 HTTPS 프로토콜을 TLS(Transport Level Security)로 변경합니다.

참고 이미 TLS를 사용하고 있는 경우에는 HTTPS 프로토콜을 SSL로 변경하십시오. 클라이언트 컴퓨터의 HTTPS 프로토콜을 변경하려면 다음 Microsoft 웹 사이트의 "ServicePointManager.SecurityProtocol 속성" 절을 참조하십시오.
http://msdn2.microsoft.com/ko-kr/library/system.net.servicepointmanager.securityprotocol(VS.80).aspx
참고 예를 들어 SSL3 프로토콜 및 TLS1 프로토콜을 지원하려면 다음과 유사한 코드를 사용하십시오.
ServicePointManager.SecurityProtocol= SecurityProtocolType.Ssl3|SecurityProtocolType.Tls;
서버 컴퓨터에서 HTTPS 프로토콜을 변경하는 방법에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
187498 IIS에서 PCT 1.0, SSL 2.0, SSL 3.0 또는 TLS 1.0을 해제하는 방법

해결 방법 K

이 문제를 해결하려면 maxConnection 속성의 값을 늘립니다. 이렇게 하려면 응용 프로그램의 구성 파일을 수정하거나 응용 프로그램 코드를 추가합니다.

참고maxConnection 속성의 기본값은 2입니다. 웹 서비스를 호출하는 Microsoft ASP.NET 연결 응용 프로그램의 경우 이 값을 프로세서 수의 12배로 설정하는 것이 좋습니다. 응용 프로그램 코드를 사용하여 이 값을 설정하려면 ServicePointManager.DefaultConnectionLimit 속성을 사용하십시오. ServicePointManager.DefaultConnectionLimit 속성에 대한 자세한 내용은 다음 Microsoft 웹 사이트를 참조하십시오.
http://msdn.microsoft.com/library/kor/default.asp?url=/library/KOR/cpref/html/frlrfSystemNetServicePointManagerClassDefaultConnectionLimitTopic.asp
응용 프로그램의 구성 파일을 사용하여 이 값을 설정하려면 다음 코드를 구성 파일에 추가합니다.
<connectionManagement>
  <add address="*" maxconnection="12"/>
</connectionManagement>
<connectionManagement> 요소를 사용하는 방법에 대한 자세한 내용은 다음 Microsoft 웹 사이트를 참조하십시오.
http://msdn.microsoft.com/library/kor/default.asp?url=/library/KOR/cpgenref/html/gngrfconnectionmanagementelement.asp

해결 방법 L

이 문제를 해결하려면 서버 및 다른 네트워크 장치의 시간 제한 설정이 올바르게 구현되었는지 확인합니다. 시간 제한 설정을 구현하는 방법에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
904262 ASP.NET 응용 프로그램에서 HttpWebRequest 클래스를 사용하는 경우 이 클래스에서 보낸 요청이 응답을 중지할 수 있다

해결 방법 M

이 문제를 해결하려면 ASP.NET 성능 조정과 관련된 내용을 읽어 봅니다. ASP.NET 성능 조정에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
821268 ASP.NET 응용 프로그램에서 웹 서비스를 요청하면 경합, 성능 저하 및 교착 상태가 발생한다

해결 방법 N

이 문제를 해결하려면 클라이언트 응용 프로그램 코드에서 시간 제한 속성의 값을 늘립니다. 이렇게 하려면 다음 속성을 사용합니다.
  • HttpWebRequest.Timeout
  • HttpWebRequest.ReadWriteTimeout
HttpWebRequest.Timeout 속성에 대한 자세한 내용은 다음 Microsoft 웹 사이트를 참조하십시오.
http://msdn2.microsoft.com/ko-kr/library/system.net.httpwebrequest.timeout(VS.80).aspx
HttpWebRequest.ReadWriteTimeout 속성에 대한 자세한 내용은 다음 Microsoft 웹 사이트를 참조하십시오.
http://msdn2.microsoft.com/ko-kr/library/system.net.httpwebrequest.readwritetimeout(VS.80).aspx

해결 방법 O

이 문제를 해결하려면 클라이언트 컴퓨터가 HTTP 100-Continue 헤더를 보내지 않았는지 확인합니다. 또는 클라이언트 컴퓨터가 HTTP 100-Continue 헤더를 받으려고 대기하고 있지 않은지 확인합니다.

참고 이 해결 방법은 웹 서버 또는 프록시 서버가 HTTP 100-Continue 헤더를 지원하지 않는 경우에 효과적입니다. HTTP 100-Continue 헤더를 사용하지 않도록 설정하는 방법에 대한 자세한 내용은 다음 Microsoft 웹 사이트를 참조하십시오.
http://msdn2.microsoft.com/ko-kr/library/system.net.servicepointmanager.expect100continue(VS.80).aspx

참조

ASP.NET 연결 응용 프로그램에서 웹 서비스를 호출할 경우의 성능 고려 사항에 대한 자세한 내용은 다음 Microsoft 웹 사이트를 참조하십시오.
http://msdn2.microsoft.com/en-us/library/aa480507.aspx(영문)
ASP.NET 연결 응용 프로그램에서 웹 서비스를 요청할 경우의 성능 문제 및 교착 상태 문제에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
821268 ASP.NET 응용 프로그램에서 웹 서비스를 요청하면 경합, 성능 저하 및 교착 상태가 발생한다
ASP.NET 연결 응용 프로그램의 성능을 높이는 방법에 대한 자세한 내용은 다음 Microsoft 웹 사이트를 참조하십시오.
http://msdn2.microsoft.com/en-us/library/ms998549.aspx(영문)
웹 서비스의 성능을 높이는 방법에 대한 자세한 내용은 다음 Microsoft 웹 사이트를 참조하십시오.
http://msdn2.microsoft.com/en-us/library/ms998562.aspx(영문)
보안 ASP.NET 연결 응용 프로그램 작성 방법에 대한 자세한 내용은 다음 Microsoft 웹 사이트를 참조하십시오.
http://msdn2.microsoft.com/en-us/library/aa302408.aspx(영문)
참고 HTTP 요청에는 TCP 전송 프로토콜이 사용됩니다. TCP는 신뢰할 수 있는 연결 지향 프로토콜입니다. 그러나 TCP 연결이 예기치 않게 닫히면 응용 프로그램은 요청을 다시 시도합니다. 서버가 연결을 닫을 경우의 클라이언트 동작 및 TCP 프로토콜에 대한 자세한 내용은 다음 W3C(World Wide Web 컨소시엄) 웹 사이트를 참조하십시오.
http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.2.4
이 문서에 포함된 타사의 연락처 정보는 기술 지원을 받는 데 도움을 주기 위한 것입니다. 이 연락처 정보는 예고 없이 변경될 수 있습니다. Microsoft는 이러한 타사 연락처 정보의 정확성을 보증하지 않습니다. FileMon 유틸리티 및 RegMon 유틸리티에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
198038 INFO: 패키지 및 배포 문제에 유용한 도구
네트워크 모니터에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
148942 네트워크 모니터를 사용하여 네트워크 트래픽을 캡처하는 방법
812953 네트워크 모니터를 사용하여 네트워크 트래픽을 캡처하는 방법




Microsoft 제품 관련 기술 전문가들과 온라인으로 정보를 교환하시려면 Microsoft 뉴스 그룹에 참여하시기 바랍니다.

속성

기술 자료: 915599 - 마지막 검토: 2007년 12월 3일 월요일 - 수정: 1.6
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft .NET Framework 1.1 Service Pack 1
키워드:?
kbtshoot kbprb KB915599

피드백 보내기

 

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