我有一個WCF服務,有一些操作可能需要很長時間... 客戶端接收到TimeoutException,但服務器在長時間操作後繼續執行。檢測服務器端的TimeoutException WCF
服務器:
public void doSomeWork(TransmissionObject o) {
doDBOperation1(o); //
doDBOperation2(o); // may result in TimeoutException on client
doDBOperation3(o); // it continues doing DB operations. The client is unaware!
}
客戶:
ServiceReference.IServiceClient cli = new ServiceReference.IServiceClient("WSHttpBinding_IService","http://localhost:3237/Test/service.svc");
int size = 1000;
Boolean done = false;
TransmissionObject o = null;
while(!done) {
o = createTransmissionObject(size);
try {
cli.doSomeWork(o);
done = true;
}catch(TimeoutException ex) {
// We want to reduce the size of the object, and try again
size--;
// the DB operations in server succeed, but the client doesn't know
// this makes errors.
}catch(Exception ex) { ... }
}
由於服務器正在執行某些數據庫操作,我需要檢測在服務器端超時要能夠回滾數據庫操作。
我試圖用與[TransactionFlow]的TransactionScope等交易,在客戶端,但在服務器上的數據庫操作使用它們嵌套!!存儲過程,所以我不能使用分佈式事務。 (我收到一個SqlException說:不能在分佈式事務中使用SAVE TRANSACTION。)。如果我使用簡單的SP(不是嵌套的),那麼交易解決方案就可以正常工作。
我的問題: 如何檢測TimeoutException,但在服務器端?我猜是與代理狀態有關的東西......或者可能是服務器可以捕獲的一些事件。 我不確定在服務器端處理交易是否是正確的解決方案。 是否有解決此問題的模式?
謝謝!