WCF: 시스템.Net.SocketException - 각 소켓 주소(프로토콜/네트워크 주소/포트)는 일반적으로 하나만 사용할 수 있습니다.
저는 WCF 서비스와 웹 애플리케이션을 가지고 있습니다.웹 응용 프로그램은 폴링과 같은 지속적인 방식으로 이 WCF 서비스에 호출합니다.당사의 생산 환경에서는 이러한 오류가 거의 발생하지 않습니다.이는 사용자가 이 오류가 발생할 때 인식하지 못한 내부 활동이기 때문입니다.
http://localhost/QAService/Service.svc에 연결할 수 없습니다.TCP 오류 코드 10048:각 소켓 주소(프로토콜/네트워크 주소/포트)는 일반적으로 하나만 사용할 수 있습니다. 127.0.0.1:80. ---> 시스템.Net.WebException:원격 서버 ---> 시스템에 연결할 수 없습니다.네트. 소켓.소켓 예외:각 소켓 주소(프로토콜/네트워크 주소/포트)는 일반적으로 하나만 사용할 수 있습니다. 127.0.0.1:80
개발/QA 환경에서 이러한 동작을 재현하는 데 어려움을 겪고 있습니다.클라이언트 연결이 한 번에 닫혔는지 확인했습니다.캐치..최종적으로여전히 이 문제의 원인이 무엇인지 이해하지 못합니다.이것에 대해 아는 사람?
참고: 저는 이 SO 질문을 살펴보았지만, 제 문제에 답하지 않는 것 같아서 반복되는 질문이 아닙니다.
TCP/IP 스택을 오버로드하고 있습니다.Windows(및 실제로 모든 소켓 스택)는 정상 작동 시 소켓이 닫히는 방식으로 인해 빠른 순서로 열 수 있는 소켓 수에 제한이 있습니다.소켓이 닫힐 때마다 특정 시간(240초 IIRC) 동안 TIME_WAIT 상태가 됩니다.폴링할 때마다 소켓이 기본 동적 범위(1024 바로 위에 있는 동적 포트 약 5000개)를 벗어나며 폴링이 종료될 때마다 해당 소켓이 TIME_WAIT에 들어갑니다.충분히 자주 폴링하면 사용 가능한 포트를 모두 사용하게 되어 TCP 오류 10048이 발생합니다.
일반적으로 WCF는 연결 풀링 등을 통해 이 문제를 피하려고 합니다.일반적으로 인터넷을 사용하지 않는 내부 서비스의 경우가 이에 해당합니다.연결 풀링을 지원하는 wsHttp 바인딩이 있는지는 모르겠지만 netTcp 바인딩이 지원해야 합니다.명명된 파이프는 이 문제에 부딪히지 않는다고 생각합니다.MSMQ 바인딩에 대해 말할 수 없었습니다.
이 문제를 해결하는 데 사용할 수 있는 두 가지 솔루션이 있습니다.동적 포트 범위를 늘리거나 TIME_WAIT 기간을 줄일 수 있습니다.전자가 더 안전한 경로일 수도 있지만 (시나리오와 달리) 소켓을 너무 많이 사용하는 경우 TIME_WAIT을 줄이는 것이 더 나은 선택사항입니다.
동적 포트 범위 변경
- regedit을 엽니다.
- HKLM\System\열기 키현재 제어 세트\서비스\Tcpip\매개 변수
- MaxUserPort 값을 편집하거나 DWORD로 만듭니다.
- 더 큰 숫자로 설정합니다.(예: 65534)
TIME_WAIT 지연 변경
- regedit을 엽니다.
- HKLM\System\열기 키현재 제어 세트\서비스\Tcpip\매개 변수
- TcpTimedWaitDelay를 편집하거나 DWORD로 만듭니다.
- 더 낮은 숫자로 설정합니다.값은 초 단위입니다.(예: 60(1분 지연)
위의 해결책 중 하나가 문제를 해결해야 합니다.포트 범위를 변경한 후에도 계속 유지된다면 폴링 기간을 늘려 자주 발생하지 않도록 할 것입니다.그것은 당신이 대기 지연 시간에 일할 수 있는 더 많은 여유를 줄 것입니다.저는 마지막 수단으로 대기 시간을 변경하겠습니다.
HttpClient는 ID 일회용 공유 개체를 구현하지만 인스턴스 수를 최대한 줄여야 합니다.각 요청에 대해 인스턴스를 하나씩 사용하는 것이 아니라 전체 애플리케이션 수명 동안 인스턴스 하나만 사용할 수 있습니다.
저는 http://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/ 에서 그것에 대해 꽤 광범위하게 썼습니다.
언급URL : https://stackoverflow.com/questions/1339142/wcf-system-net-socketexception-only-one-usage-of-each-socket-address-protoco
'your programing' 카테고리의 다른 글
파일 내용에서 변수 확장 (0) | 2023.08.30 |
---|---|
VBA(Excel)에서 Bash 스크립트를 호출하는 방법 (0) | 2023.08.30 |
jQuery: 양식 제출 시 어떤 버튼을 클릭했는지 확인하는 방법은 무엇입니까? (0) | 2023.08.30 |
오라클의 다른 스키마에서 데이터 선택 (0) | 2023.08.30 |
Python의 파일에서 문자 읽기 (0) | 2023.08.30 |