Модель асинхронного программирования в WCF с ошибкой async / await — Runtime при сериализации

#wcf #asynchronous

#wcf #асинхронный

Вопрос:

Я разработал свой код на основе этой публикации : Модель асинхронного программирования в WCF с async / await

Не было ошибки компиляции, но при размещении она генерирует указанную ниже ошибку :

Введите ‘System.Многопоточность.Задачи.Задача `1[System.Строка]’ не может быть сериализована. Подумайте о том, чтобы пометить ее атрибутом DataContractAttribute и пометить все ее m элементов, которые вы хотите сериализовать, атрибутом DataMemberAttribute. Если тип является коллекцией, подумайте о том, чтобы пометить его атрибутом CollectionDataContractAttribute. Смотрите документацию Microsoft .NET Framework для других поддерживаемых типов.

Что может быть причиной этого.

Комментарии:

1. Имеет ли какой-либо из ваших контрактов с данными новый класс TaskTask<K> в качестве элемента данных? Асинхронные задачи являются новыми в WCF и доступны через выпуск Async CTP для WCF. Посмотрите на образец, предоставленный как часть CTP, чтобы понять, как это работает. Но из-за ошибки платформа WCF пытается сериализовать класс задач, который не предназначен для сериализации.

2. Привет, спасибо за ваш ответ. Я хотел бы прикрепить сегмент кода, который был бы прост для понимания. Я не возвращаю объект datacontract, просто возвращая Task<string>. метод ——— общедоступная асинхронная задача<строка> HelloAsync (имя строки) { возвращает ожидаемую задачу. Factory.StartNew(() => «hello» name); } ———

Ответ №1:

Похоже, что один из ваших методов либо возвращает объект Task, либо имеет объект Task в качестве одного из своих параметров.

Задачи не могут передаваться через границу веб-службы — это причина вашей проблемы.

Обновление: я просмотрел ссылку, по которой вы получили этот код, и похоже, что предоставленный код является только концептуальным. Если вы внимательно посмотрите на формулировку, он говорит «будет» вместо «может».

WCF vNext примет асинхронную модель как на стороне клиента, так и на стороне сервера и предоставит новые перегрузки на основе задач для некоторых наиболее используемых асинхронных API.

Поскольку задачу нельзя передать через границу веб-службы, она не будет работать.

Комментарии:

1. ПРИВЕТ, спасибо за ответ. Я прикрепил сегмент кода, который не возвращает объект task. общедоступный класс HelloService : IServiceContract { общедоступная асинхронная задача<строка> HelloAsync(имя строки) { возвращает ожидаемую задачу. Factory.StartNew(() => «привет» имя); } }

2. Я не модифицировал ни один код, приведенный в примере модели асинхронного программирования в WCF с async / await blogs.msdn.com/b/endpoint/archive/2010/11/13 / … итак, как я мог получить ошибку