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