如何在WCF中实现异步调用

时间:2014-08-13 12:30:56

标签: c# wcf asynchronous

我想在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);
    }
    }

请帮我修改上面的代码以异步方式工作。 在此先感谢。

1 个答案:

答案 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);
        });
    }
 }

但这可能不安全。我不知道你的其他实现,也不知道你使用的组件。