[英]Async implementation of synchronous WCF operation
我有.net 4.5 WCF服务。 我将重写服务实现以使用EF6访问数据库。 此服务有许多客户端并处理许多呼叫。 我不能改变服务合同和客户。 使用像SaveAsync这样的异步EF操作是否有意义,最后我的服务必须返回T not Task(因为旧客户端)。
更新
Exaple运营合同
[OperationContract]
public object AddEntity(object entity)
{
using(var context = new MyContext())
{
context.Add(entity)
var task = context.SaveChangesAsync()
return task.Result;
}
}
因此,即使我正在使用异步,线程将被task.Result阻塞。 我不能使用等待因为操作合同必须更改为返回任务。 如何实现这样的场景?
使用像SaveAsync这样的异步EF操作是否有意义,最后我的服务必须返回T not Task(因为旧客户端)。
是的,它确实有意义,并将提高您的WCF服务的可扩展性。 您不必更改合同以利用服务器端的异步API。 转换对客户端完全透明,请检查:
[OperationContract]
public async Task<object> AddEntityAsync(object entity)
{
using(var context = new MyContext())
{
context.Add(entity)
return await context.SaveChangesAsync();
}
}
WCF应检测异步方法并正确路由调用,而无需在客户端进行修改。
我想SaveChangesAsync
返回一个Task
而不是一个Task<object>
但是你知道该怎么做;)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.