2009-02-05 4 views
2

웹 서비스 속도가 느려졌습니다. 내 웹 서비스가 gsoap & managed C++에 있습니다. IIS/apache가 호스팅되지 않지만 xml을 사용합니다. 클라이언트가 .NET에 있습니다. 서비스 계산 시간이 가볍습니다 (응답을 준비하려면 < 0.1 초). 서비스가 원활하고 빠르며 좋은 가용성을 기대합니다. 약 100 개의 클라이언트가 있으며 응답 시간은 1 초입니다. 클라이언트는 분당 약 1 건의 요청을 처리합니다. 클라이언트가 tcp open port test를 통해 웹 서비스 존재를 확인 중입니다. 그래서 혼잡을 피하기 위해 gSoap KeepAlive를 false로 설정했습니다. 모든 것이 잘 돌아갈 때까지 : TCPView (sysinternals)에서 연결을 볼 수 있습니다.웹 서비스 속도 저하

새로운 특수 동기화 프로그램이 이제 루프에서 서비스를 호출합니다. 로드가 높지만 모든 것이 30 초 이내에 처리됩니다.sysinternals TCPView를 사용하면 약 1 천 개의 연결이 TIME_WAIT에 있음을 알 수 있습니다. 서비스가 느려지 며 서비스가 응답하는 데 몇 초가 걸립니다.

SoapHttpClientProtocol 연결을 재설정해야 할 수 있습니까? 누군가가 루프에서 웹 서비스 호출로 유령을 TIME_WAIT 가지십니까?

답변

1

통화가 끝난 후 연결을 닫고 각 요청마다 새 연결을 여는 것과 같은 소리가납니다. 연결을 닫거나 열린 연결을 다시 사용하십시오.

+0

나는 동의한다. KeepAlive = false를 서버 측에서 사용하길 원하지만 클라이언트 측에서 을 사용하면 .NET은 기본적으로 재활용을 선호합니다. 이 해결책을 찾았습니다 : http://yakkowarner.blogspot.com/2008/11/calling-web-service-in-loop.html 하지만 무거워 보입니다. 나는 그 중 하나를 시도하고있다 : http://forums.asp.net/t/1003135.aspx – wiwulo

0

위에서 설명한 구현에 매우주의하십시오. 그들에게 심각한 문제가 있습니다.

  1. (위의 COMMENT) yakkowarner.blogspot.com/2008/11/calling-web-service-in-loop.html에 기술 구현 :

    문제 : 모든 작업이 될 것입니다 다음에 wsdl.exe를 사용하여 웹 서비스를 재생성 할 때 쓸데없이 지워지므로이 수정 사항이 메시지 문자열에 의존하여 작동하지 않는다는 것을 잊지 않을 것입니다.

  2. forums.asp.net/t/1003135.aspx (ABOVE COMMENT)에 기재된 구현

    :

    PROBLEM :하면 5000와 65535 사이의 엔드 포인트를 선택하는이 때문에, 표면이은 같다 좋은 생각. 그것에 대해 생각한다면 나중에 사용할 포트를 예약 할 수있는 방법이 없습니다 (적어도 내가 생각할 수있는 방법은 없습니다). 목록의 다음 포트가 현재 사용되지 않는다는 것을 어떻게 보장 할 수 있습니까? 사용하려는 포트를 순차적으로 선택하고 다른 응용 프로그램이 목록의 다음 포트를 선택하면 호스가 연결됩니다. 아니면 클라이언트 컴퓨터에서 실행중인 다른 응용 프로그램이 연결을 위해 임의의 포트를 사용하기 시작하면 어떻게됩니까? UNPREDICTABLE 시점에 묶여 있어야합니다. "원격 호스트에 연결할 수 없거나 사용할 수 없음"과 같은 오류 메시지가 표시 될 수 있습니다. 문제를 해결하기가 더 어려울 수도 있습니다.나는 당신에게이 문제에 적합한 솔루션을 제공 할 수는 없지만

, 당신이 할 수있는 작업은 다음과 같습니다

  1. 시도가 웹 서비스 요청의 수를 최소화 또는 이상 더 그들을 밖으로 확산 더 오랜 기간
  2. 웹 서비스가 올바른 아키텍처가 아닌 경우 웹 서비스가 아닌 메시징 시스템을 사용해야합니다.
  3. 허용되는 OS 연결 수를 설정하십시오 레지스트리를 사용하여 65K로 윈도우
  4. 설정하면 소켓이 약간 낮은 숫자로 TIME_WAIT에 남아 OS의 시간 (이 문제의 그것의 자신의 목록을 제공합니다)