2011-11-14 2 views
0

클라이언트가 내 응용 프로그램에서 메시지를 교환 할 수 있도록 PollingDuplexHttpBinding을 사용합니다. 클라이언트는 나중에 사용할 수 있도록 정적 사전에 추가하는 RegisterClient() 메서드를 통해 레지스터입니다.PollingDuplexHttpBinding 및 응용 프로그램 풀 재활용

코드는 다음과 같습니다

[ServiceContract(Namespace = "...", CallbackContract = typeof(MyServiceCallback))] 
public class MyService 
{ 
    public static Dictionary<string, MyServiceCallback> Clients = 
     new Dictionary<string, MyServiceCallback>(); 

    [OperationContract] 
    public void RegisterClient(string name) 
    { 
     Clients[name] = 
      OperationContext.Current.GetCallbackChannel<MyServiceCallback>(); 
    } 

    public static void SendMessage(string name, string message) 
    { 
     Clients[name].SendMessage(message); 
    } 
} 

[ServiceContract] 
public interface MyServiceCallback 
{ 
    [OperationContract(IsOneWay = true)] 
    void SendMessage(string message); 
} 

모든 응용 프로그램 풀 재활용됩니다 경우를 제외하고 잘 작동합니다.

물론 나는 정적 인 것들이 그 점에서 이상적이지 않다는 것을 알고 있습니다.

내 클라이언트 참조를 저장하여 응용 프로그램 풀 recyle에서 생존 할 수있는 좋은 곳은 어디입니까?

난 당신이 지속하고 채널을 다시 할 필요가 그것에 대해 때문에 응용 프로그램 풀 재활용 살아남을 themn 할 수 있다고 생각하지 않습니다
+0

어떤 InstanceContextMode를 사용하고 있습니까? –

+0

@parapurarajkumar InstanceContextMode를 지정하지 않았으므로 기본값 인 InstanceContextMode.PerSession이 사용됩니다. –

답변

0

...

더 좋은 방법은 당신의 WCF 서비스를 호스팅하는 이럴 것 이런 종류의 것들을위한 Windows 서비스 (응용 프로그램 풀 리사이클) ...