c# - 如何使用 Visual Studio - 生成异步 WCF 调用?

标签 c# .net wcf asynchronous

我的OperationContract:

public List<MessageDTO> GetMessages()
        {
            List<MessageDTO> messages = new List<MessageDTO>();
            foreach (Message m in _context.Messages.ToList())
            {
                messages.Add(new MessageDTO()
                {
                    MessageID = m.MessageID,
                    Content = m.Content,
                    Date = m.Date,
                    HasAttachments = m.HasAttachments,
                    MailingListID = (int)m.MailingListID,
                    SenderID = (int)m.SenderID,
                    Subject = m.Subject
                });
            }
            return messages;
        }

在服务引用配置中,我选中了“生成异步操作”选项。如何使用生成的 GetMessagesAsync()?在网上我找到了使用 AsyncCallback 的示例,但我对此并不熟悉。有没有办法以某种友好的方式使用它,例如 .NET 4.5 中的 asyncawait 关键字?如果不是,我应该如何异步调用该方法?

最佳答案

如果您选择“生成异步操作”,您将获得必须使用回调的“旧”行为。

如果您想使用新的异步/等待语法,则必须选择“生成基于任务的操作”(默认情况下处于选中状态)。

当使用默认的 Wcf 模板时,这将生成以下代理代码:

  public System.Threading.Tasks.Task<string> GetDataAsync(int value) {
      return base.Channel.GetDataAsync(value);
  }

如您所见,没有更多的回调。取而代之的是 Task<T>被退回。

您可以通过以下方式使用此代理:

public static async Task Foo()
{
    using (ServiceReference1.Service1Client client = new ServiceReference1.Service1Client())
    {
        Task<string> t = client.GetDataAsync(1);
        string result = await t;
    }
}

你应该用async标记调用方法然后使用 await在调用您的服务方法时。

关于c# - 如何使用 Visual Studio - 生成异步 WCF 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13777710/

相关文章:

c# - 默认非空泛型值

c# - Visual Studio 2017 (C#) 中结构可视化工具的快捷方式

c# - 查找哪个 .NET 程序集定义了类型

c# - 如何找出托管了哪些 wcf 服务

c# - 如何创建多个图片框并保留它们?

c# - 如何通过 Activator.CreateInstance 实例化对象并使用 Dapper 将其插入到表中

c# - 如何在 C# 中使用 C++ 类实例

.net - 在冲突 dll 引用之间进行选择时,.NET 'primary' 是什么意思?

c# - WCF 服务中的 WebOperationContext.Current null

c# - '使用类型 .. 不支持 NetDataContractSerializer' - 为什么要使用 NetDataContractSerializer?