【问题标题】:calling a wcf 4.5 WCF service asynhronously异步调用 wcf 4.5 WCF 服务
【发布时间】:2013-11-21 14:49:08
【问题描述】:

我想确保我有正确的代码来异步调用我的 Web 服务。如果有人可以帮忙,我将不胜感激。

我正在使用带有 4.5.1 框架的 Visual Studio 2013

我的客户端应用程序中有以下代码调用服务:

public async Task<ActionResult> Read([DataSourceRequest]DataSourceRequest request)
        {    
            try
            {
                YeagerTechWcfService.Status[] status = await db.GetStatusesAsync();

                var serializer = new JavaScriptSerializer();
                var result = new ContentResult();
                serializer.MaxJsonLength = Int32.MaxValue;
                result.Content = serializer.Serialize(status.ToDataSourceResult(request));
                result.ContentType = "application/json";

                return result;
            }

对于上述方法调用,我的 WCF 服务合同中有以下内容:

[ServiceContract]
    public interface IYeagerTechWcfService
    {
            [OperationContract]
        Task<List<Status>> GetStatusesAsync();

我的 Web 服务类中有以下内容,它实现了相同方法的接口类:

public class YeagerTechWcfService : IYeagerTechWcfService
    {
            public async Task<List<Status>> GetStatusesAsync()
        {
            try
            {
                using (YeagerTechEntities DbContext = new YeagerTechEntities())
                {
                    DbContext.Configuration.ProxyCreationEnabled = false;
                    DbContext.Database.Connection.Open();

                    var status = await DbContext.Status.ToListAsync();

                    return status;
                }
            }
            catch (Exception)
            {
                throw;
            }
        }

根据我进一步阅读的内容,我还需要在 OperationContract 属性之后放置以下内容: *这是真的吗?*

[OperationContractAttribute(AsyncPattern = true)]
    IAsyncResult BeginGetStatusesAsync(AsyncCallback callback, object asyncState);

    string EndGetStatusesAsync(IAsyncResult result);

【问题讨论】:

  • 我并不总是在醉酒的情况下调用 WCF 服务,但当我这样做时,我会异步调用它们。

标签: c# .net wcf asynchronous asp.net-4.5


【解决方案1】:

不,从 .NET 4.5 开始不再需要 AsyncPattern

我有一篇博文Async WCF Today and Tomorrow 比较了异步 WCF 的旧方式(博文:.NET 4.0 中的“Today”)与异步 WCF 的新方式(博文:.NET 中的“Tomorrow”) 4.5)。

【讨论】:

    【解决方案2】:

    您的 WCF 服务不必支持异步方法;客户端生成(添加服务参考)可以为您生成客户端异步调用处理。

    向您的客户端应用程序添加服务引用时,只需勾选生成异步操作复选框,您的代理类将包含调用的异步版本。简单!

    【讨论】:

      猜你喜欢
      • 2011-05-04
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      • 2020-01-21
      • 2018-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多