2011-08-31 3 views
0

내 응용 프로그램은 클라이언트 응용 프로그램의 요청을 충족시키기 위해 여러 외부 WCF 서비스와 통신해야합니다. WCF 서비스이기 때문에 여러 동시 요청을 처리 할 수 ​​있어야합니다. 내가 하나 개 이상의 서비스를 acessing되기 때문에 그 존재하고, 나는 다음과 같은 방식으로 클라이언트를 그룹화에 대해 생각 다음 코드의 나머지에서,WCF 프록시 풀/관리자

public static class ClientManager 
{ 
    private static readonly Service1Client _service1Client = new Service1Client(); 
    private static readonly Service2Client _service2Client = new Service2Client(); 
    ... 

    public static Service1Client Service1DefaultClient { get { return _service1Client; } } 
    public static Service2Client Service2DefaultClient { get { return _service2Client; } } 
} 

그럼,

ClientManager.Service1DefaultClient.SomeMethod(); 
ClientManager.Service2DefaultClient.SomeMethod(); 
... 
을 실행하는 데 필요한 유일한 것

아이디어는 WCF 클라이언트를보다 잘 관리 할 수있는 중앙 위치를 만드는 것입니다. 그러나이 디자인이 동시에 여러 요청을 Service1DefaultClientService2DefaultClient에 발행 할 서비스에 가장 적합한 것인지 여부는 알 수 없습니다. 너는 무엇을 제안 하는가? 선택할 각 서비스의 여러 프록시를 사용하여보다 복잡한 클라이언트 풀 만들기?

답변

3

정적 클라이언트 프록시를 사용하는 것이 나에게 좋지 않은 것처럼 보입니다.

  • ClientBase 인스턴스가 오류 상태로 전환되면 사용할 수 없게되고 다시 만들어야합니다.
  • 상태 기반 서비스를 사용하는 경우 세션 수명은 클라이언트 프록시 개체의 유효 기간과 동일하므로 매우 오래 걸릴 수 있습니다.
  • 바인딩 설정에 따라 클라이언트베이스 may serialize concurrent calls이 동일한 프록시 인스턴스에서 생성되었습니다. 귀하의 경우 이는 성능에 큰 영향을 줄 수 있습니다.
  • 나는이 문제가 어떤 문제인지 알지 못합니다.

프록시는 ChannelFactory caching 때문에 비교적 가볍기 때문에 필요할 때마다 새로운 인스턴스를 만듭니다.

관련 문제