문제

저는 WCF 및 NETTCP 서비스를 사용하여 엔터프라이즈 수준의 응용 프로그램을 작성하는 중입니다. 나는 처음에는 호기심에서 NetTCP를 선택했지만 나중에 데이터 크런치의 양으로 인해 결과를 반환하는 데 5 시간 이상이 소요되는 서비스를 가질 수 있기 때문에 나중에 최선의 선택이라고 결정했습니다.

내가 현재 내 서비스를 생성하는 방식은 다단계 프로세스입니다. 기본 사항 중 일부 (포트 번호, 연결 클라이언트의 서버 이름, HTTP 및 NETTCP 등을 활성화할지 여부)를 지정하는 구성 부분 (System.Configuration 사용)이 있으며 아래에 "서비스"모음이 있습니다. 그것. 예를 들어, 다음은 기본적인 모습입니다.

<serverConfiguration tcpListenerPortNumber="60000" httpGetEnabled="true" httpListenerPortNumber="6000" serverName="localhost" retryEnabled="true" retryInterval="5" maxRetryAttempts="3">
    <services>
        <add virtualDirectory="Service1" applicationName="Service1" assembly="SampleService" type="SampleService.Service1" />            
    </services>
</serverConfiguration>

기본적으로 여기서 일어나는 일은 내 Windows 서비스가 시작되고u003Cservices /> 시작 시간을 속이는 서비스 당 스레드를 수집하고 스폰하며 각 스레드에는 서비스가 실제로 사는 앱 도메인이 포함되어 있으므로 서비스에 어떤 종류의 결함이 있으면 시스템을 중단하지 않습니다.

내가 실행중인 "문제"는이 응용 프로그램이 약 20 개의 서비스를 주최하고 있으며 모든 서비스가 시작되고 실행되는 데 15-20 초가 걸립니다. 나는 스레딩과 appdomain 조각을 그 값으로 내려 놓았다 (각 서비스가 순차적으로 열렸을 때 1 분 이상 걸리는 데 사용됨). 그러나 이것이 실제로 훨씬 더 빨리 갈 수있는 것 같습니다.

누구든지 제안이 있습니까? Google Bing은 하나의 서비스를 호스팅하기위한 수많은 예제를 가지고 있지만 실제 응용 프로그램을 위해 많은 것을 찾지 못합니다 (슬프게도 "Hello World"는 최종 사용자에게 호소력이 없습니다). 현재 Windows 서비스 및 NETTCP를 통해 여러 서비스를 주최하는 경우 어떻게하고 있습니까?

도움이 되었습니까?

해결책

나는 마침내 그것을 알아 냈고 결국 WCF 나 내 구성과 관련이 없었다. AppDomain을 만들 때 다른 프로젝트에서 코드를 훔쳐서 크기가 훨씬 작았으며 AppDomain을 만드는 섹션에서 Singledomain 옵션을 사용하고 있음을 발견했습니다. Multidomain으로 변경하면 총 하중이> 4 초로 이동했으며 메모리 사용량은 ~ 150MB에서 ~ 40MB로 떨어졌습니다.

도움을 주셔서 감사합니다. 적어도 코드를 다시 검토하게되었습니다!

다른 팁

세 가지 제안이 있습니다.

첫째, 전화가 5 시간 이상 걸릴 수 있다면 큐잉 / 호출 스타일 아키텍처를 고려할 것입니다.

서비스를 20 개의 Windows 서비스로 나누는 것을 고려하십시오. 각 서비스는 자체 Windows 서비스에서 실행됩니다. 이는 복잡성을 추가하고 메모리 사용량을 증가 시키지만 개별 서비스를 더 빨리 사용할 수 있습니다.

마지막으로, 서비스 양해자에있는 코드를 확인하십시오.

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