중간 계층 클라이언트 애플리케이션
이 항목에서는 WCF(Windows Communication Foundation)를 사용하는 중간 계층 클라이언트 애플리케이션과 관련된 다양한 문제에 대해 설명합니다.
중간 계층 클라이언트 성능 향상
ASP.NET을 사용하는 웹 서비스와 같은 이전 통신 기술과 비교할 때 WCF의 풍부한 기능 집합으로 인해 WCF 클라이언트 인스턴스를 만드는 것이 더 복잡할 수 있습니다. 예를 들어, ChannelFactory<TChannel> 개체가 열릴 때 클라이언트 인스턴스에 대한 시작 시간을 늘리는 절차인 서비스를 사용하여 보안 세션을 설정할 수 있습니다. 일반적으로 WCF 클라이언트는 여러 개의 호출을 만들었다가 닫기 때문에 이러한 추가 기능이 클라이언트 애플리케이션에 큰 영향을 주지는 않습니다.
그러나 중간 계층 클라이언트 애플리케이션은 많은 WCF 클라이언트 개체를 빠르게 만들 수 있으므로, 초기화 요구 사항이 향상됩니다. 서비스를 호출할 때 중간 계층 애플리케이션의 성능을 향상시키는 두 가지 기본적인 방법이 있습니다.
WCF 클라이언트 개체를 캐시하고 가능한 경우 후속 호출에 다시 사용합니다.
ChannelFactory<TChannel> 개체를 만든 다음 해당 개체를 사용하여 각 호출에 대해 새 WCF 클라이언트 채널 개체를 만듭니다.
이러한 방법을 사용할 때 고려해야 할 문제는 다음과 같습니다.
서비스에서 세션을 사용하여 클라이언트별 상태를 유지할 경우 서비스의 상태가 중간 계층 클라이언트의 상태에 연결되기 때문에 다중 클라이언트 계층 요청에서 중간 계층 WCF 클라이언트를 다시 사용할 수 없습니다.
서비스에서 클라이언트 단위로 인증을 수행해야 하는 경우 WCF 클라이언트(또는 ChannelFactory<TChannel>)를 만든 이후에는 중간 계층의 클라이언트 자격 증명을 수정할 수 없기 때문에 중간 계층 WCF 클라이언트(또는 WCF 클라이언트 채널 개체)를 다시 사용하지 않고 중간 계층에 들어오는 요청마다 새로운 클라이언트를 만들어야 합니다.
채널과 채널에서 만든 클라이언트는 스레드로부터 안전하므로 네트워크에서 동시에 여러 메시지 쓰기를 지원하지 않을 수 있습니다. 큰 메시지를 보낼 경우, 특히 스트리밍할 경우에는 다른 보내기 작업이 완료되는 동안 보내기 작업이 차단될 수 있습니다. 따라서 채널을 재사용하여 제어의 흐름이 서비스로 반환될 경우 즉, 코드 경로에서 공유 클라이언트에 대한 콜백을 생성하는 서비스를 공유 클라이언트가 호출할 경우 동시성 결여 및 교착 상태의 두 가지 문제가 발생할 수 있습니다. 이는 재사용하는 WCF 클라이언트의 형식에 관계없이 적용됩니다.
채널을 공유하는지 여부에 관계없이 오류가 발생한 채널을 처리해야 합니다. 그러나 채널을 다시 사용할 경우 오류 채널에서 대기 중인 여러 요청 또는 보내기를 종료할 수 있습니다.
여러 요청에 대해 클라이언트를 재사용하는 모범 사례를 보여 주는 예는 ASP.NET 클라이언트의 데이터 바인딩을 참조하세요.
또한 XmlSerializer를 사용하여 serialize할 수 있는 데이터 형식을 사용하는 클라이언트가 런타임에 해당 데이터 형식에 대한 serialization 코드를 생성하고 컴파일할 때 시작 성능이 저하될 수 있습니다. 이 시작 성능을 향상시킬 수 있습니다. ServiceModel 메타데이터 유틸리티 도구(Svcutil.exe)는 애플리케이션에 대해 컴파일된 어셈블리에서 필요한 serialization 코드를 생성하여 이러한 애플리케이션의 시작 성능을 개선시킬 수 있습니다. 자세한 내용은 방법: XmlSerializer를 사용하여 WCF 클라이언트 애플리케이션의 작동 시간 개선을 참조하세요.