sag*_*y36 5 .net c# wcf multithreading entity-framework
我正在尝试在我的WCF服务中创建一个异步方法,但我收到上述主题错误消息.我只想返回一个类别列表.
为了清楚起见,最后在上面的错误消息中添加以下内容:YeagerTechModel.Category []
除了此方法(旁边有一个红色的"X")之外,成功添加了wcfclient服务.实际上,所有方法(在wcf服务客户端中)都期望一个关联的异步方法(红色"X")与其他常规同步方法一起使用.
我知道如何使用WCF,但我不是它的专家.为了使这个功能正常,我需要做什么?
我正在使用VisualStudio 2013的完整版本,并使用4.5.1框架进行项目.我也在使用EntityFramework 6.
我的服务合同包含以下命名空间.
using System.Threading.Tasks;
Run Code Online (Sandbox Code Playgroud)
我的经营合同如下.
[OperationContract(Name="GetCategoriesAsync")]
Task<List<Category>> GetCategoriesAsync();
Run Code Online (Sandbox Code Playgroud)
我的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; }
}
}
Run Code Online (Sandbox Code Playgroud)
我的Web服务中的方法如下.请注意,我没有任何设计时编译错误,并且可以成功构建解决方案:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
小智 3
为什么你的服务要异步?异步方法是在客户端使用服务引用创建的。当您向服务添加服务引用时,将该服务引用标记为允许生成异步操作。使用 VS 2013 和 .NET 4.5,您可以进行基于任务的操作或异步操作。
然后您的客户端可以调用异步方法返回任务,然后 future 等待任务以获取返回对象。或者调用 begin 方法并在完成 begin 方法调用时进行回调。假设您需要客户端异步调用。这些是在服务代码中的客户端而不是服务器端。
| 归档时间: |
|
| 查看次数: |
16983 次 |
| 最近记录: |