c# - 不能在同一个契约(Contract)中有两个同名的操作(异步和非)

标签 c# wcf .net-4.5

当以下服务被激活时,我得到以下异常(不能在同一个契约(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/

相关文章:

c# - 找不到任何已安装的.NET Core SDK

c# - 为什么我的 POST 方法不起作用?

c# - 以 WAV 格式从麦克风捕获流

twitter - 连接到 Twitter - RestSharp OAuth2

c# - 如何在当前组合框中选择一个值时使另一个组合框可见?

c# - Serilog 未记录到与错误不同的 Sentry 级别

c# - 调用非托管函数 char 返回 char *

jquery - "End element ' jsonCalendarItems ' from namespace ' ' expected. Found element ' 项目 ' from namespace ' '

.net - 如何将 UsernameToken 添加到 Web 服务代理类的 RequestSoapContext 属性

c# - DataContractJsonSerializer 解析iso 8601日期