我想在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);
}
});
我的問題,以另一種方式:
- 服務器可能有3個客戶
- 客戶端A死了(我拉的筆記本電腦的插頭)
- 服務器死亡並重新聯機
- 新客戶端出現
所以基本上,你會使用回調來驗證客戶的「仍然活着的狀態」,或者你會使用輪詢和跟蹤「多久我沒有聽說過客戶端」...
如何連接到WCF Sever的?你使用TCP嗎?這將改變如何實施聯營。 – 2009-12-15 17:33:39