다음을 통해 공유


리소스 사용 제어 및 성능 향상

이 항목에서는 리소스 소비를 제어하고 성능 메트릭에 영향을 주는 WCF(Windows Communication Foundation) 아키텍처의 다양한 영역에 있는 다양한 속성에 대해 설명합니다.

WCF에서 리소스 소비를 제한하는 속성

WCF(Windows Communication Foundation)는 보안 또는 성능 목적으로 특정 유형의 프로세스에 제약 조건을 적용합니다. 이러한 제약 조건은 할당량과 제한의 두 가지 주요 형태로 제공됩니다. 할당량은 도달하거나 초과할 때 시스템의 특정 지점에서 즉각적인 예외를 트리거하는 제한입니다. 조절 장치는 예외가 즉시 발생하지 않는 제한입니다. 대신 스로틀 제한에 도달하면 처리가 계속되지만 해당 스로틀 값에 의해 설정된 제한 내에서 계속됩니다. 이 제한된 처리는 다른 곳에서 예외를 트리거할 수 있지만 애플리케이션에 따라 달라집니다.

할당량과 제한을 구분하는 것 외에도 일부 제한 속성은 직렬화 수준에 있고 일부는 전송 수준에서, 일부는 애플리케이션 수준에서 배치됩니다. 예를 들어 모든 시스템 제공 전송 바인딩 요소에 의해 구현되는 할당량 TransportBindingElement.MaxReceivedMessageSize은 기본적으로 65,536바이트로 설정되어 악의적인 클라이언트가 과도한 메모리 소비를 유발하여 서비스에 대한 서비스 거부 공격에 관여하지 못하도록 합니다. (일반적으로 이 값을 낮추면 성능을 높일 수 있습니다.)

serialization 할당량의 예는 DataContractSerializer.MaxItemsInObjectGraph serializer가 단일 ReadObject 메서드 호출에서 직렬화하거나 역직렬화하는 최대 개체 수를 지정하는 속성입니다. 애플리케이션 수준 제한의 예로는 ServiceThrottle.MaxConcurrentSessions 기본적으로 동시 세션 채널 연결 수를 10으로 제한하는 속성이 있습니다. 할당량과 달리 이 스로틀 값에 도달하면 애플리케이션은 처리를 계속하지만 새 세션 채널은 허용하지 않습니다. 즉, 다른 세션 채널 중 하나가 종료될 때까지 새 클라이언트가 연결할 수 없습니다.

이러한 컨트롤은 특정 유형의 공격에 대한 기본 제공 완화를 제공하거나 메모리 공간, 시작 시간 등과 같은 성능 메트릭을 개선하도록 설계되었습니다. 그러나 애플리케이션에 따라 이러한 컨트롤은 서비스 애플리케이션 성능을 방해하거나 애플리케이션이 전혀 작동하지 않도록 할 수 있습니다. 예를 들어 비디오를 스트리밍하도록 설계된 애플리케이션은 기본 TransportBindingElement.MaxReceivedMessageSize 속성을 쉽게 초과할 수 있습니다. 이 항목에서는 WCF의 모든 수준에서 애플리케이션에 적용되는 다양한 컨트롤에 대한 개요를 제공하고, 설정이 애플리케이션을 방해하는지 여부에 대한 자세한 정보를 얻는 다양한 방법을 설명하고, 다양한 문제를 해결하는 방법을 설명합니다. 기본 속성이 serialization 또는 전송 제약 조건인 경우에도 대부분의 제한 및 일부 할당량은 애플리케이션 수준에서 사용할 수 있습니다. 예를 들어 서비스 클래스의 DataContractSerializer.MaxItemsInObjectGraph 속성을 사용하여 ServiceBehaviorAttribute.MaxItemsInObjectGraph 속성을 설정할 수 있습니다.

비고

특정 문제가 있는 경우 먼저 WCF 문제 해결 빠른 시작을 읽어 문제(및 해결 방법)가 나열되어 있는지 확인해야 합니다.

serialization 프로세스를 제한하는 속성은 데이터에 대한 보안 고려 사항에 나열됩니다. 전송과 관련된 리소스의 사용을 제한하는 속성은 전송 할당량에 나열됩니다. 애플리케이션 계층에서 리소스 사용을 제한하는 속성은 클래스의 ServiceThrottle 멤버입니다.

일반적인 보안 문제에 대한 기본 보호를 제공하면서 다양한 애플리케이션 유형에서 기본 애플리케이션 기능을 사용하도록 설정하기 위해 이전 값의 기본값을 선택했습니다. 그러나 다른 애플리케이션 디자인은 하나 이상의 제한 설정을 초과할 수 있지만 그렇지 않으면 애플리케이션은 안전하며 디자인된 대로 작동합니다. 이러한 경우 초과되는 스로틀 값과 수준을 식별하고 애플리케이션 처리량을 늘리기 위한 적절한 작업 과정을 결정해야 합니다.

일반적으로 애플리케이션을 작성하고 디버깅할 때, 구성 파일 또는 프로그래밍 방식으로 ServiceDebugBehavior.IncludeExceptionDetailInFaults 속성을 true로 설정합니다. 이렇게 하면 WCF에서 보기 위해 서비스 예외 스택 추적을 클라이언트 애플리케이션에 반환하도록 지시합니다. 이 기능은 문제가 있는 경우 관련될 수 있는 할당량 설정을 표시하는 방식으로 대부분의 애플리케이션 수준 예외를 보고합니다.

일부 예외는 런타임에 애플리케이션 계층의 표시 유형보다 낮게 발생하며 이 메커니즘을 사용하여 반환되지 않으며 사용자 지정 System.ServiceModel.Dispatcher.IErrorHandler 구현에서 처리되지 않을 수 있습니다. Microsoft Visual Studio와 같은 개발 환경에 있는 경우 대부분의 예외가 자동으로 표시됩니다. 그러나 Just My Code Visual Studio와 같은 개발 환경 설정으로 일부 예외를 마스킹할 수 있습니다.

개발 환경의 기능에 관계없이 WCF 추적 및 메시지 로깅 기능을 사용하여 모든 예외를 디버그하고 애플리케이션의 성능을 조정할 수 있습니다. 자세한 내용은 추적을 사용하여 애플리케이션 문제 해결을 참조하세요.

성능 문제 및 XmlSerializer

런타임에 해당 데이터 형식에 대한 serialization 코드 생성 및 컴파일을 사용하여 XmlSerializer 직렬화할 수 있는 데이터 형식을 사용하는 서비스 및 클라이언트 애플리케이션은 시작 성능이 저하될 수 있습니다.

비고

미리 생성된 serialization 코드는 클라이언트 애플리케이션에서만 사용할 수 있으며 서비스에서는 사용할 수 없습니다.

ServiceModel 메타데이터 유틸리티 도구(Svcutil.exe)는 애플리케이션에 대해 컴파일된 어셈블리에서 필요한 serialization 코드를 생성하여 이러한 애플리케이션의 시작 성능을 향상시킬 수 있습니다. 자세한 내용은 방법: XmlSerializer를 사용하여 WCF 클라이언트 애플리케이션의 시작 시간 향상을 참조하세요.

ASP.NET WCF 서비스를 호스팅할 때 성능 문제

WCF 서비스가 IIS 및 ASP.NET 따라 호스트되는 경우 IIS 및 ASP.NET 구성 설정은 WCF 서비스의 처리량 및 메모리 사용량에 영향을 줄 수 있습니다. ASP.NET 성능에 대한 자세한 내용은 ASP.NET 성능 향상을 참조하세요. 의도하지 않은 결과가 발생할 수 있는 한 가지 설정은 MinWorkerThreads.의 ProcessModelSection속성입니다. 애플리케이션에 고정 또는 적은 수의 클라이언트가 있는 경우 2로 설정 MinWorkerThreads 하면 CPU 사용률이%100에 가까운 다중 프로세서 컴퓨터에서 처리량 향상을 제공할 수 있습니다. 이러한 성능 향상에는 비용이 발생합니다. 또한 메모리 사용량이 증가하여 확장성이 저하될 수 있습니다.

참고하십시오