2013-07-24 1 views
0

저는 매일 stackoverflow에 익숙하지만 매일 사용합니다. 오늘은 어디서나이 정보를 얻을 수 없기 때문에 나는 너를 필요로한다.wcf 콜백 + save session not operationcontext

내 질문은 : 나는 서비스 콜백을 클라이언트에 만들고 싶지만 서비스에서 호출하는 함수에서 콜백하고 싶지 않다. (가입자/게시자와 같은 것) 콜백 인스턴스를 저장하려고합니다. 그런 다음 서비스에서 콜백을 트리거 할 함수를 호출하려고합니다 (callbacks.PrintMessage ("Message"));) 콜백 인스턴스를 정적 ​​클래스의 정적 목록에 저장합니다.

callback.function()를 호출 할 때 임이 오류가 점점 : 임이와 인스턴스 얻기 때문에 "당신이 배치 객체를 사용하는"OperationContext.Current.GetCallbackChannel < "콜백 인터페이스를">

무엇을 할 수 그 콜백 인스턴스를 저장합니까?

고마워요.

페드로

CODE :

//FUNCTION IN MY SERVICE 
     public void Subscribe() 
       { 
        var callback = OperationContext.Current.GetCallbackChannel<IMonitoringWebServiceCallback>(); 
        callbacks.Add(callback); 

        callback = OperationContext.Current.GetCallbackChannel<IMonitoringWebServiceCallback>(); 


        AlarmCallbackSingleton.Instance.AddCallback(callback); 

        //callback.PrintString("String"); //HERE IT WORKS! BUT I DONT WANT CALL HERE! 

        alarmInfoHandler = new AlarmInfoEventHandler(AlarmInfoHandler); 
        NewAlarmInfo += alarmInfoHandler; 
       } 

    //FUNCTION IN THE SAME SERVICE CALLED BY OTHER CLIENT 
     public void PublishAlarm(string alarm) 
       { 
        AlarmInfoEventArgs e = new AlarmInfoEventArgs(); 
        e.Alarm = alarm; 
        NewAlarmInfo(this, e); 
       } 

     public void AlarmInfoHandler(object sender, AlarmInfoEventArgs e) 
       { 
     List<IMonitoringWebServiceCallback> callbacks = AlarmCallbackSingleton.Instance.GetCallbacks(); 

    //EVERYONE THAT SUBSCRIBED SHOULD EXECUTE THIS (HERE I GET THE DISPOSED ERROR) 
        callbacks.ForEach(x => x.ShowString("String!")); 
       } 
+0

코드를 게시 할 수 있습니까? – GrandMasterFlush

+0

죄송합니다. 나는 Stackoverflow에 익숙하지 않아서 코드 식별이 좋지 않을뿐입니다. 네가 물었던 것이 거기에 있다고 생각하고 네가 이해할 수 있다고 생각한다. 고맙습니다. – cyp

답변

0

좋아. 알 겠어! 이 질문에 대한 대답은 다음과 같이 간단합니다.

서비스에 가입하면 어딘가에 (목록 등 ..) 콜백 객체가 아닌 OperationContext를 저장해야합니다. 그런 다음 PublishAlarm이 다른 클라이언트에 의해 호출되면 이벤트가 트리거되고 구독하는 모든 클라이언트의 OperationContext를 얻어야합니다. 예를 들어 정적 목록 (싱글 톤 클래스)에 objetcs를 저장했습니다. 그런 다음

:이 도움이 될 수 있습니다

public void AlarmInfoHandler(object sender, AlarmInfoEventArgs e) 
{ 
    var operation = AlarmCallbackSingleton.Instance.operationContext 
    var callback = operation.GetCallbackChannel<IMonitoringWebServiceCallback>(); 
    callback.ShowAlarm(); //function you want to call 
} 

희망!

페드로