我有一个异步WCF操作,在一定条件下我将取消该操作(请参见下文)。但是,此后,我在客户端收到Faulted
事件。我还在服务器端配置了一个FaultHandler,但是调用不会转到HandleError
或ProvideFault
。
这是基于Task
的WCF操作的默认行为吗?我们不应该在客户端得到OperationCanceledException
吗?
示例代码
操作:
Task<MyResult> CalculateResultAsync(SomeParameter parameter);
服务端:
Task<MyResult> CalculateResultAsync(SomeParameter parameter)
{
TaskCompletionSource<MyResult> tcs = new TaskCompletionSource<MyResult>();
Task.Run(() => {
//do something
//based on some condition cancel tcs
tcs.SetCanceled();
});
return tcs.Task;
}
答案 0 :(得分:0)
该服务的实现不会更改SOAP协议。
如果服务出现故障(取消),则客户端会收到故障。
此外,在服务器代码上使用Task.Run
通常是一种不好的做法,因为它将一个线程池线程换为另一个线程池线程,然后又返回。