문제

우리는 SOAPHTTPCLIENTPROTOCOL 클래스를 사용하여 비누 호출을하는 IIS에서 실행되는 ASP.NET 웹 응용 프로그램이 있습니다. 지난 며칠 동안 SOAP 서비스 호출을 할 때 여러 XP 머신이 시간 초과 오류를보고하기 시작했습니다.

테스트 앱에서 추적을 스택 :

System.Net.WebException: The operation has timed out
   at System.Web.Services.Protocols.WebClientProtocol.GetWebResponse(WebRequest request)
   at System.Web.Services.Protocols.HttpWebClientProtocol.GetWebResponse(WebRequest request)
   at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
   at TestWS.localhost.Service1.HelloWorld() in C:\Prototypes\TestWS\Web References\localhost\Reference.cs:line 78
   at ASP.default_aspx.__Renderform1(HtmlTextWriter __w, Control parameterContainer) in c:\Inetpub\wwwroot\TestWS\Default.aspx:line 17

TCP/ TRACE 및 WIRSHARK를 사용하여 요청의 헤더가 전송되고 있지만 콘텐츠가 아닌 것을 알 수 있습니다. 그러나 컨텐츠 길이의 HTTP 매개 변수가 정확하므로 컨텐츠 스트림이 플러시되지 않은 것처럼 보입니다.

Microsoft 업데이트 가이 문제를 일으킨 것으로 의심됩니다. 잠재적으로 KB970430, KB971737 그리고 KB968389. 문제는 IIS 5.X (XP 버전의 IIS)로 격리 된 것으로 보입니다.

도움이 되었습니까?

해결책

업데이트: 이것은 웹 서버에서 실행하고 웹 서버에서 비누 서버로의 HTTP 연결을 현장에서 확인하는 데 문제가되는 것으로 판명되었습니다.

전체 설명: 레코드의 경우 이것은 .NET의 HTTP 프로토콜 처리의 결함입니다. 시나리오는 다음과 같습니다.

클라이언트는 HTTP Post의 헤더를 보냅니다.

POST /WS/Test.asmx HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 2.0.50727.3603) 
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://testuri.org/HelloWorld"
Host: loadtest-app
Content-Length: 288
Expect: 100-continue
Connection: Keep-Alive

컨텐츠는 기대 때문에 전송되지 않습니다. 이제 서버가 응답합니다.

HTTP/1.1 100 Continue

이 시점에서 클라이언트는 응답하지 않습니다. 이에 대한 해결 방법은 100 콘티 니를 비활성화하는 것이며, 이는 본질적으로 요청 헤더와 컨텐츠를 하나의 청크로 전송하도록 강요합니다. 다음과 같이 web.config에서 수행 할 수 있습니다.

<system.net>
   <settings>
      <servicePointManager expect100Continue="false"/>
   </settings>
</system.net>

그러나 클라이언트 측 트레이스 로깅을 전환하면 프로토콜 예외는 CR이 HTTP 헤더에서 LF 뒤에 있어야한다고 진술합니다. .NET 네트워크 로직에는 어딘가에 연약한 코드가있는 것으로 보입니다. 그리고 이것을 요약하는 것은 IIS 5.1의 ASP.NET (XP에서 실행되는 버전)의 문제 일뿐입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top