WCF 서비스가 높은 병렬 상황에서 목표의 적극적인 거부를 알리는 이상 처리 정보
일반적으로 목표 적극 거부(TCP 10061)의 예외는 크게 2가지 가능성입니다.
1: 서버 종료 또는 서비스 종료
2: 클라이언트가 호출한 포트 오류나 서버 방화벽이 해당 포트를 열지 않았습니다.
그러나 우리의 서비스 자체는 호출할 수 있다. 단지 간혹 이 오류를 보고했을 뿐, 이것은 이 두 가지 문제로 인한 것이 아니라는 것을 설명한다.계속 구글, stackoverflow에서 이런 글을 보았습니다: 전송문
If this happens always, it literally means that the machine exists but that it has no services listening on the specified port, or there is a firewall stopping you.
If it happens occasionally - you used the word "sometimes" - and retrying succeeds, it is likely because the server has a full 'backlog'.
When you are waiting to be accepted on a listening socket, you are placed in a backlog. This backlog is finite and quite short - values of 1, 2 or 3 are not unusual - and so the OS might be unable to queue your request for the 'accept' to consume.
The backlog is a parameter on the listen function - all languages and platforms have basically the same API in this regard, even the C# one. This parameter is often configurable if you control the server, and is likely read from some settings file or the registry. Investigate how to configure your server.
If you wrote the server, you might have heavy processing in the accept of your socket, and this can be better moved to a separate worker-thread so your accept is always ready to receive connections. There are various architecture choices you can explore that mitigate queuing up clients and processing them sequentially.
Regardless of whether you can increase the server backlog, you do need retry logic in your client code to cope with this issue - as even with a long backlog the server might be receiving lots of other requests on that port at that time.
There is a rare possibility where a NAT router would give this error should it's ports for mappings be exhausted. I think we can discard this possibility as too much of a long shot though, since the router has 64K simultaneous connections to the same destination address/port before exhaustion.
아마도 이 오류가 계속 발생한다면 서버나 방화벽의 문제일 수도 있고, 이 문제가'Sometime'에서 발생한다면 백로그의 문제일 수도 있다.backlog는 tcp 차원의 요청 대기열입니다. socket을 호출하여 요청을 할 때 서비스 측은 하나의 대기열로 배열됩니다. 높은 병렬 상황에서 서비스 측이 요청을 처리하지 못하면 일부 요청은 바로 버려집니다. 그래서 목표를 보고하여 TCP10061의 이상을 적극적으로 거절했습니다.
백로그가 생겨서 구글 키워드인'WCF 백로그'를 계속해 보니 wcf binding 설정에 listen 백로그 항목이 하나 있는데 기본값이 10입니다. 그래서 서비스의listen 백로그를 100으로 바꾸었습니다.
참, listenBacklog 속성을 추가할 때 주의할 점은 기본 endpoint를 제거해야 한다는 것입니다. 이 endpoint는 vs 등 메타데이터를 발견하는 데 사용됩니다. 이 메타데이터를 옮기지 않고 서비스를 시작할 때 포트가 감청된 오류를 보고합니다.
참조:
http://stackoverflow.com/questions/2972600/no-connection-could-be-made-because-the-target-machine-actively-refused-it
https://msdn.microsoft.com/en-us/library/ee377061(v=bts.10).aspx
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.