2011-09-02 3 views
10

동일한 WCF 채널을 반복적으로 재사용하는 응용 프로그램이 있습니다. 팩토리 객체를 통해 정적 참조를 유지합니다. 이것이 좋은 채널인지 또는 x 채널을 열고 모든 채널이 단일 채널을 사용하는 대신 이러한 채널을 통해 호출해야하는지 궁금합니다.단일 WCF 채널 성능 대 다중 채널

하나의 채널 만 사용하는 경우 이러한 서비스 호출이 대기열에 저장됩니까 아니면 x 채널을 사용할 때 같은 일이 발생합니까?

답변

11

모든 요청에 ​​단일 채널 팩토리를 사용해야하지만 각 요청마다 서로 다른 채널을 구성해야합니다. 채널을 다시 사용하지 마십시오. 그들은 생성하는데 비용이 많이 들지 않으며 스레드로부터 안전하지도 않습니다. 생성하는 데 비용이 많이 드는 것은 채널 공장입니다. 스레드로부터 안전하며 재사용 할 수 있습니다. 물론 채널 팩토리가 오류 상태가되면 다시 열어야 할 수도 있습니다.

+1

_channelFactory.CreateChannel()에 의해 반환 된 ICommunicationObject를 유지하는 것은 좋은 방법이 아닙니까? 이제 모든 요청에 ​​대해 1 개의 채널을 열어 둔 채 각 호출마다 _channelFactory.CreateChannel()을 수행하지 않고 처음 생성 된 정적 하나를 다시 사용합니다. –

+1

@Bjorn Bailleul, 전혀 좋은 생각이 아닙니다. '_channelFactory.CreateChannel()'에 의해 리턴 된 인스턴스는 가능한 한 짧게 살아야하며 재사용되지 않아야합니다. 내가 말했듯이'CreateChannel' 호출은 비싸지 않다. 그것은 매우 빠릅니다. 요청할 때마다 호출 할 수 있습니다. 비용이 많이 드는 것은 채널 공장을 만드는 것입니다. 이것이 캐시 할 수 있습니다. –

+1

@Darin - "각 통화마다 다른 채널 사용"에 대한 참조 또는 링크가 있습니까? 이 블로그는 채널 공장에서 가장 많이 참조되는 기사 중 하나이며 첫 번째 우수 사례는 "동일한 프록시 재사용"입니다. http://blogs.msdn.com/b/wenlong/archive/2007/10/27/performance @imported-of-wcf-client-proxy-creation-and-best-practices.aspx – ErnieL

6

@Darin 디미트로프

재사용 같은 프록시 많은 경우에 , 당신은 같은 프록시를 재사용 할 것이다. 이 성능이 가장 좋습니다. 초기 보안 협상이 높은 비용을 가질 수 있기 때문에 보안 기능을 사용할 때 특히 그렇습니다.

프록시는 채널과 동일합니다. 당신이 세션 작업을하려는 경우 새 채널을 생성하여 (각 요청에 대한 새 세션을 설정하고 싶지 않아, 또한

ISimpleContract proxy = factory.CreateChannel(); 
((IClientChannel)proxy).Open(); 

: 당신이 this blog post를 보면, 다음과 같은 코드를 볼 수 있습니다/때마다 프록시).