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