我使用net.tcp和netTcpBinding將WCF服務放在一起,以便與我的Silverlight客戶端獲得雙工通信。我從Silverlight應用程序調用服務,服務調用另一個服務器,並在WCF服務類中傳遞一個回調方法。遠程服務器多次回呼,每次執行時,WCF服務使用callbackchannel將數據發送給Silverlight客戶端。大部分時間它都可以很好地工作。如何檢查使用net.tcp進行雙工的Silverlight客戶端的連接是否仍然有效?
如果用戶輸入一個很大的請求,在大量的回調已經工作後,我會得到一個TimeoutException。 (顯然,在其他地方有一些工作需要阻止,但我想先搶先服務。)
我曾期待在某種'if(client.ConnectionState == faulted)'檢查之前檢查試圖回調到Silverlight客戶端,但我似乎無法找到保存連接狀態的對象。有一個嗎?我是否從錯誤的一面接近了這一點?
這是我第一次投入服務net.tcp和雙工。我剛搬家,我的WCF聖經仍然在一個盒子裏。某處。 :-)所以,我不能做我平常的背景閱讀。
任何指針都會被感激地收到。下面是一些裸露的代碼的情況下我的描述過於糊狀:
private IActiveDirectoryClient client;
private AsyncSearchRunner runner;
public void Search(Request request)
{
this.client = OperationContext.Current.GetCallbackChannel<IActiveDirectoryClient>();
runner = new AsyncSearchRunner();
runner.Run(request.SearchRoot, request.SearchFilter, request.PageSize,
System.DirectoryServices.Protocols.SearchScope.Subtree, SendObjects);
}
private void SendObjects(List<DirectoryObject> items)
{
Response response = new Response();
response.DirectoryObjects = items.ToArray();
client.SendResponse(response);
}