2013-11-21 227 views
2

我想確保我有正確的代碼以便對我的web服務進行異步調用。如果有人可以請求幫助,我將非常感激。異步調用wcf 4.5 WCF服務

我正在使用Visual Studio 2013與4.5.1框架

我在我的客戶端應用程序下面的代碼使該服務的調用:

public async Task<ActionResult> Read([DataSourceRequest]DataSourceRequest request) 
     {  
      try 
      { 
       YeagerTechWcfService.Status[] status = await db.GetStatusesAsync(); 

       var serializer = new JavaScriptSerializer(); 
       var result = new ContentResult(); 
       serializer.MaxJsonLength = Int32.MaxValue; 
       result.Content = serializer.Serialize(status.ToDataSourceResult(request)); 
       result.ContentType = "application/json"; 

       return result; 
      } 

在我的WCF服務合同,我有以下爲上述方法調用:

[ServiceContract] 
    public interface IYeagerTechWcfService 
    { 
      [OperationContract] 
     Task<List<Status>> GetStatusesAsync(); 

我在我的Web服務類中具有以下相同方法的接口類:

public class YeagerTechWcfService : IYeagerTechWcfService 
    { 
      public async Task<List<Status>> GetStatusesAsync() 
     { 
      try 
      { 
       using (YeagerTechEntities DbContext = new YeagerTechEntities()) 
       { 
        DbContext.Configuration.ProxyCreationEnabled = false; 
        DbContext.Database.Connection.Open(); 

        var status = await DbContext.Status.ToListAsync(); 

        return status; 
       } 
      } 
      catch (Exception) 
      { 
       throw; 
      } 
     } 

根據我進一步閱讀的內容,我還需要在OperationContract屬性之後放置以下內容: * 這是真的嗎? *

[OperationContractAttribute(AsyncPattern = true)] 
    IAsyncResult BeginGetStatusesAsync(AsyncCallback callback, object asyncState); 

    string EndGetStatusesAsync(IAsyncResult result); 
+2

我並不總是打電話給WCF服務,但是當我這樣做時,我會不經意地給他們打電話。 – Will

回答

5

不,從.NET 4.5開始不再需要AsyncPattern

我有一個博客文章Async WCF Today and Tomorrow比較舊的異步WCF方式(博客文章中的「今日」:.NET 4.0)與異步WCF的新方式(「Tomorrow」在博客文章:.NET 4.5 )。

1

您的WCF服務不必支持異步方法;客戶端代(添加服務引用)可以爲您生成客戶端異步呼叫處理。

向客戶端應用程序添加服務引用時,只需勾選生成異步操作複選框,您的代理類將包含調用的異步版本。簡單!