我正在尝试在我的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;
}
}
答案 0 :(得分:3)
为什么要让您的服务异步?使用服务引用在客户端创建异步方法。向服务添加服务引用时,请将服务引用标记为允许生成异步操作。使用VS 2013和.NET 4.5,您可以进行基于任务的操作或异步操作。
然后您的客户端可以调用异步方法返回任务,然后等待任务获取返回对象。或者在完成begin方法调用时使用回调调用begin方法。假设您需要客户端异步调用。这些是服务代码中的客户端而不是服务器端。
答案 1 :(得分:0)
尝试从您的操作中删除后缀“Async”。我相信这是保留的。
我无法证明这一点,但我认为VS 2013 Update 1已经默默地改变了一些东西,因为我记得我无法调用任务操作,现在我可以。
[ServiceContract]
public interface IXmlImportService
{
[OperationContract]
Task<ImportResult> Import(ImportRequest request);
}
此处使用WCF测试客户端。