2013-11-21 4 views
2

Я хочу, чтобы у меня был правильный код для асинхронного вызова моей веб-службы. Если кто-то может помочь, я был бы очень признателен.вызов 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(); 

I в моем классе веб-сервисов, который реализует класс интерфейса для того же метода:

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

No, AsyncPattern больше не требуется от .NET 4.5.

У меня есть сообщение в блоге Async WCF Today and Tomorrow, которое сравнивает старый способ асинхронного WCF («Сегодня» в сообщении в блоге: .NET 4.0) с новым способом асинхронного WCF («Завтра» в сообщении в блоге: .NET 4.5).

1

Ваша служба WCF не имеет поддержки асинхронных методов; создание клиента (Add Service Reference) может генерировать для вас обработку асинхронных вызовов на стороне клиента.

При добавлении ссылки на службу к вашему клиентскому приложению установите флажок «Генерировать асинхронные операции», а ваш прокси-класс будет содержать асинхронные версии вызовов. Легко!

Смежные вопросы