중간 계층 클라이언트 애플리케이션

이 항목에서는 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 클라이언트 애플리케이션의 작동 시간 개선을 참조하세요.

참고 항목