wcf测试客户端不支持此操作,因为它使用system.threading.tasks.task

时间:2013-10-29 15:59:31

标签: c# .net multithreading wcf entity-framework

我正在尝试在我的WCF服务中创建一个异步方法,但是我收到了上述主题错误消息。我只是想返回一个类别列表。

要清楚,最后在上面的错误消息中添加以下内容: YeagerTechModel.Category []

除了此方法(旁边有一个红色的“X”)外,成功添加了wcfclient服务。实际上,所有方法(在wcf服务客户端中)都期望一个关联的异步方法(红色“X”)与其他常规同步方法一起使用。

我知道如何使用WCF,但我不是它的专家。 我需要做些什么才能使其正常运行?

我正在使用VisualStudio 2013的完整版本,并使用4.5.1框架进行项目。我也在使用EntityFramework 6

我的服务合同包含以下命名空间。

using System.Threading.Tasks;

我的操作合同如下。

[OperationContract(Name="GetCategoriesAsync")]
Task<List<Category>> GetCategoriesAsync();

我的DataContract如下:

namespace YeagerTechModel
{
    using System;
    using System.Runtime.Serialization;
    using System.ServiceModel;
    using System.Collections.Generic;

    [Serializable, DataContract(IsReference = true)] 
    public partial class Category
    {
        public Category()
        {
            this.Projects = new HashSet<Project>();
        }

        [DataMember]
        public short CategoryID { get; set; }
        [DataMember]
        public string Description { get; set; }

        [DataMember]
        public virtual ICollection<Project> Projects { get; set; }
    }
}

我的网络服务中的方法如下。请注意,我没有任何设计时编译错误,并且可以成功构建解决方案:

public async Task<List<Category>> GetCategoriesAsync()
        {
            try
            {
                using (YeagerTechEntities DbContext = new YeagerTechEntities())
                {
                    DbContext.Configuration.ProxyCreationEnabled = false;
                    DbContext.Database.Connection.Open();

                    var category = await DbContext.Categories.ToListAsync();

                    return category;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

2 个答案:

答案 0 :(得分:3)

为什么要让您的服务异步?使用服务引用在客户端创建异步方法。向服务添加服务引用时,请将服务引用标记为允许生成异步操作。使用VS 2013和.NET 4.5,您可以进行基于任务的操作或异步操作。

然后您的客户端可以调用异步方法返回任务,然后等待任务获取返回对象。或者在完成begin方法调用时使用回调调用begin方法。假设您需要客户端异步调用。这些是服务代码中的客户端而不是服务器端。

示例显示在这篇文章中:http://www.codeguru.com/columns/experts/building-and-consuming-async-wcf-services-in-.net-framework-4.5.htm

答案 1 :(得分:0)

尝试从您的操作中删除后缀“Async”。我相信这是保留的。

我无法证明这一点,但我认为VS 2013 Update 1已经默默地改变了一些东西,因为我记得我无法调用任务操作,现在我可以。

[ServiceContract]
public interface IXmlImportService
{
    [OperationContract]
    Task<ImportResult> Import(ImportRequest request);
}

此处使用WCF测试客户端。

WCF Test Client accessing a WCF service with async operations