WCF에서 간단한 클라이언트 - 서버 예제를 만들고 싶습니다. 콜백을 사용하여 테스트를 수행했으며 지금까지는 제대로 작동합니다. 다음 인터페이스로 약간 놀았습니다.WCF - 클라이언트 콜백 대 "가입자 목록 유지"에 대한 폴링
[ServiceContract(SessionMode = SessionMode.Required, CallbackContract = typeof(IStringCallback))]
public interface ISubscribeableService
{
[OperationContract]
void ExecuteStringCallBack(string value);
[OperationContract]
ServerInformation Subscribe(ClientInformation c);
[OperationContract]
ServerInformation Unsubscribe(ClientInformation c);
}
간단한 예입니다. 조금 조정. 서버가 문자열 콜백을 실행하도록 요청할 수 있습니다.이 경우 서버가 문자열을 역순환하고 가입 된 모든 클라이언트 콜백을 호출합니다.
이제, 다음과 같은 질문이 있습니다. 모든 클라이언트가 서버에 "등록"되고 서버가 클라이언트가 여전히 살아 있는지 묻는 시스템을 구현하려는 경우 콜백 (그래서이 "stringcallback"대신에 일종의 TellTheClientThatIAmStillHereCallback). 콜백에서 통신 상태를 확인함으로써 클라이언트가 죽었는지 "알 수 있습니다". 이 비슷한 :
Subscribers.ForEach(delegate(IStringCallback callback)
{
if (((ICommunicationObject)callback).State == CommunicationState.Opened)
{
callback.StringCallbackFunction(new string(retVal));
}
else
{
Subscribers.Remove(callback);
}
});
내 문제, 다른 방법에 넣어 :
- 는 서버 (필자는 노트북의 플러그를 당겨) 이
- 클라이언트 A가 사망 3 클라이언트가있을 수 있습니다 서버가 종료되어 온라인으로 돌아옵니다.
- 새 클라이언트가 나타납니다.
기본적으로 콜백을 사용하여 클라이언트의 "아직 살아있는 상태"를 확인 하시겠습니까? 아니면 폴링을 사용하고 "클라이언트에 대해 얼마나 오랫동안 들으 셨는지"추적 하시겠습니까?
어떻게 WCF 서버에 연결하고 있습니까? TCP를 사용하고 있습니까? 그러면 풀링을 구현하는 방법이 바뀔 것입니다. –