我想在WCF中实现异步调用。我想要的只是异步调用Insert()操作契约。这将在History表中插入记录。由于这是一个耗时的过程,我希望它是异步完成的。它没有返回类型。 以下是代码:
[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);
}
}
请帮我修改上面的代码以异步方式工作。 在此先感谢。
答案 0 :(得分:0)
首先,更改您的合同以返回任务
[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);
});
}
}
但这可能不安全。我不知道你的其他实现,也不知道你使用的组件。