10 May 2008

Типізований DataSet як параметер WCF Сервісу

Так бува і таке. Навіть R&D проекти мають проблеми з архітектурами, та пост не про це...

Отже, якщо є веб-сервіс (WCF) який повертає не типізований DataSet(тобто в контракті просто клас DataSet), а потрібно повернути саме типізований то:

The underlying connection was closed: The connection was closed unexpectedly.

Обожнюю такі масаги :). Але це з боку клієнту.

Якщо подивитися з боку сервісу, то месага набагато зрозуміліша.

There was an error while trying to serialize parameter http://tempuri.org/:DoWork3Result. The InnerException message was 'Type 'TryWCFAndDataSet.DataSet1' with data contract name 'DataSet1:http://schemas.datacontract.org/2004/07/TryWCFAndDataSet' is not expected. Add any types not known statically to the list of known types - for example, by using the KnownTypeAttribute attribute or by adding them to the list of known types passed to DataContractSerializer.'.  Please see InnerException for more details.

Перше рішення проблеми зрозуміло з пояснення до помилки, але для мене немає жодної потреби в типізованому датасеті. А тому і бажання робити залежність від датасетів - теж(+ ще на додачу ускладнений WSDL та відповідно генерований проксі).  Отже декілька альтернатив.

1) Налаштувати XML серіалізацію. Для цього потрібно маркувати метод контракту за допомогою XmlSerializerFormat, це проінструктує серіалайзер використовувати IXmlSerializable. А тут в DataSet все добре. А отже і на клієнті буде все добре.


[OperationContract]
[XmlSerializerFormat]
DataSet DoWork3();

2) Другий метод, це просто копіювати кожну таблицю DataSeta в новий DataSet, відповідно просто отримати не типізований датасет з усіма данними. Можна ще покопіювати додаткову інфу, на кшталт, відносин між таблицями, культури, тощо. Як реалізовувати цей метод схоже розповідати не треба ;) ...

Помічено як: , ,
 

Коментарі

Немає коментарів
Анонімні коментарі деактивовані. Увійдіть або Зареєструйтесь щоб мати доступ до ресурсів Спільноти.

About Mike Chaliy

Вчу українську, багато працюю. Цікавлюсь моделюванням небезпек. Більшість часу витрачаю на .Net.