C# 如何在WCF中实现异步调用
我想在WCF中实现异步调用。我只想异步调用Insert()操作契约。这将在历史记录表中插入记录。由于这是一个耗时的过程,我希望它是异步完成的。它没有返回类型。 代码如下:C# 如何在WCF中实现异步调用,c#,wcf,asynchronous,C#,Wcf,Asynchronous,我想在WCF中实现异步调用。我只想异步调用Insert()操作契约。这将在历史记录表中插入记录。由于这是一个耗时的过程,我希望它是异步完成的。它没有返回类型。 代码如下: [ServiceContract] public interface IDBService { [OperationContract] void Insert(RequestDetails Requestvalue); [OperationContract] void Update(R
[ServiceContract]
public interface IDBService
{
[OperationContract]
void Insert(RequestDetails Requestvalue);
[OperationContract]
void Update(RequestDetails Requestvalue);
// TODO: Add your service operations here
}
[DataContract]
public class RequestDetails
{
[DataMember]
public string messageType { get; set; }
[DataMember]
public string projectId { get; set; }
[DataMember]
public string jsonMessage { get; set; }
}
public class DBService : IDBService
{
public string QueueDBConnectionString = ConfigurationManager.AppSettings["QueueDBConnectionString"].ToString();
DBConnection QueueDBConnectionObject ;
public void Insert(RequestDetails Requestvalue)
{
QueueDBConnectionObject = new DBConnection(QueueDBConnectionString);
QueueDBConnectionObject.Insert(Requestvalue);
}
public void Update(RequestDetails Requestvalue)
{
QueueDBConnectionObject = new DBConnection(QueueDBConnectionString);
QueueDBConnectionObject.Update(Requestvalue);
}
}
请帮助我修改上述代码以异步方式工作。
提前感谢。首先,更改合同以返回任务
[ServiceContract]
public interface IDBService
{
[OperationContract]
Task Insert(RequestDetails Requestvalue);
[OperationContract]
Task Update(RequestDetails Requestvalue);
}
这就改变了实现的方式
public class DBService : IDBService
{
public Task Insert(RequestDetails Requestvalue)
{
return Task.Run(() => {
QueueDBConnectionObject = new DBConnection(QueueDBConnectionString);
QueueDBConnectionObject.Insert(Requestvalue);
});
}
}
但这可能并不安全。我不知道您的其他实现,也不知道您使用的组件。什么是
DBConnection
?我只知道DbConnection
,它没有Insert
函数DbConnection是我为数据操作(如Insert/update/delete)编写的一个类。您能否指定为什么这段代码可能不安全?因为我不知道其他类的实现QueueDBConnectionObject
看起来像是通过一个新实例分配给它:这可能会导致错误。但这在以前看起来很危险。获取编译时错误-无法将lambda表达式转换为类型“System.Threading.Tasks.TaskScheduler”,因为它不是委托类型。修复了它。它是运行
而不是启动
!