【发布时间】:2019-10-11 23:08:15
【问题描述】:
我正在调用 WCF 服务,该服务将启动一批信用卡费用。如果发生异常,我想知道它是否在方法执行和实际收费之前发生。例如,对于 TimeoutException,无法知道 WCF 方法是否已执行,因此我需要确保在调查情况之前不会重试这些费用。但是如果网络刚刚关闭,或者服务器证书过期,或者在方法实际执行之前发生了其他任何事情,我可以解锁我的记录以便稍后重试,而无需人工干预。
try
{
var response = wcfClient.ProcessBatch(paymentBatch);
wcfClient.Close();
//...
}
catch(CommunicationException)
{
//Safe to assume ProcessBatch did not execute?
wcfClient.Abort();
}
catch(TimeoutException)
{
//Indeterminate state. Have to assume operation may have succeeded server-side
wcfClient.Abort();
}
catch(Exception)
{
//Assuming operation may have succeeded server-side
}
这是使用wsHttpBinding。 CommunicationException 是否保证该方法没有执行,或者它也可以在响应期间被抛出?
【问题讨论】: