извикване на 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();

Имам следното в моя клас на уеб услуга, което имплементира интерфейсния клас за същия метод:

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);

person sagesky36    schedule 21.11.2013    source източник
comment
Не винаги се обаждам на услугите на WCF пиян, но когато го правя, ги звъня асинхронно.   -  person    schedule 21.11.2013


Отговори (2)


Не, AsyncPattern вече не се изисква от .NET 4.5.

Имам публикация в блог Async WCF днес и утре, която сравнява стария начин на асинхронен WCF („Днес“ в публикацията в блога: .NET 4.0) с новия начин на асинхронен WCF („Утре“ в публикацията в блога: .NET 4.5).

person Stephen Cleary    schedule 21.11.2013

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

Когато добавяте препратка към услуга към вашето клиентско приложение, просто поставете отметка в квадратчето Генериране на асинхронни операции и вашият прокси клас ще съдържа асинхронните версии на извикванията. лесно!

person Roy Dictus    schedule 21.11.2013