在服务器端WCF上检测TimeoutException

在服务器端WCF上检测TimeoutException,wcf,transactions,timeoutexception,Wcf,Transactions,Timeoutexception,我有一个WCF服务,有一些操作可能需要很长时间。。。 客户端接收到TimeoutException,但服务器在长时间操作后继续执行 服务器: public void doSomeWork(TransmissionObject o) { doDBOperation1(o); // doDBOperation2(o); // may result in TimeoutException on client doDBOperation3(o); // it continues

我有一个WCF服务,有一些操作可能需要很长时间。。。 客户端接收到TimeoutException,但服务器在长时间操作后继续执行

服务器:

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) { ... }
}
因为服务器正在执行一些DB操作,所以我需要检测服务器端的超时,以便能够回滚DB操作

我尝试在客户端使用带有[TransactionFlow]、TransactionScope等的事务,但服务器上的DB操作使用的是嵌套的存储过程!!,因此,我不能使用分布式事务。我收到一个SqlException,它说:无法在分布式事务中使用SAVE事务。。如果我使用不嵌套的简单SP,那么带有事务的解决方案就可以正常工作

我的问题: 如何在服务器端检测TimeoutException?我猜是和代理身份有关。。。或者可能是服务器可以捕获的一些事件。 我不确定在服务器端处理事务是否是正确的解决方案。。 有解决这个问题的模式吗


谢谢

>P>而不是等待操作超时,您可以考虑使用异步操作,如本博客文章:


我们的想法是,你确切地期望手术需要一些时间。当任务完成后,服务器将向客户端发出信号。

,而不是等待操作超时,您可以考虑使用异步操作,如本博客文章:

我们的想法是,你确切地期望手术需要一些时间。当作业完成时,服务器将向客户端发送信号