当以下服务被激活时,我得到以下异常(不能在同一个契约(Contract)中有两个具有相同名称的操作,方法 ExecuteAsync 和 Execute)。
[ServiceContract]
public interface IMyService
{
[OperationContract]
byte[] Execute(MyRequest request);
[OperationContract]
Task<byte[]> ExecuteAsync(MyRequest request);
}
如果您使用 svcutil.exe 创建服务引用,我想这很有意义,因为基于任务的操作是自动为您创建的。但是,我不想添加服务引用,而只是使用标准的 ChannelFactory 来创建 WCF channel 。如果不将异步方法重命名为其他方法,是否还有其他方法可以做到这一点?或者我必须将客户端上的同步方法包装在 Task.Run 中吗?
最佳答案
以上内容无效,因为 WCF 本身为您的案例 Execute()
中的每个 OperationContract 创建了两种方法,一种是同步方法,另一种是异步方法,可以通过编写 ServiceClientObj 在客户端调用。 ExexuteAsync(request)
,所以你不需要在IMyService
中显式添加async方法。Framework自己负责生成每个Operation的async
方法
关于c# - 不能在同一个契约(Contract)中有两个同名的操作(异步和非),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28612991/