Как я могу написать веб-сервис, который возвращает динамический набор переменных в .NET? - PullRequest
2 голосов
/ 22 сентября 2011

Моя текущая настройка - это веб-служба ASMX, которая имеет объект Item и возвращает List<> из Items.

Item имеет 114 полей различных типов.Он используется веб-приложениями .NET, а также веб-приложениями Java (использующими Axis2 для создания клиентского прокси).

Моя проблема заключается в том, что каждый раз, когда мы хотим добавить поле в набор результатов, мы имеемизменить сервис, добавив поле к объекту, а также сгенерировать новый клиентский прокси для стороны java.Кроме того, сопоставление полей sql с полями объекта - это один большой метод, загружающий каждое поле из устройства чтения данных в объект, обеспечивая преобразование в правильный тип данных.

Существует ли более динамичный способ сделать это?Я посмотрел список словаря, но это не может быть сериализовано.Альтернативой является отправка List<> из Struct с полями Key и Value.Теперь это требует усилий по синтаксическому анализу типов на клиенте, что не обязательно является оптимальным.

Существует ли шаблон, который обрабатывает что-то подобное или, если не учитывать, есть ли у кого-нибудь хорошее решение, чтобы помочь сделать этонемного более ремонтопригоден?Я открыт для преобразования его в WCF (хотя я не слишком знаком с WCF), если у наших Java-приложений есть достойный способ использовать эту услугу.

Если вам нужны дополнительные сведения, просто спросите.Спасибо!

1 Ответ

4 голосов
/ 22 сентября 2011

Помимо использования чего-то вроде List<KeyValuePair<string, object>> Я не думаю, что вы найдете какое-либо другое решение; WCF не сильно поможет в этом отношении.

Я думаю, что это действительно хорошее решение, оно сделает чтение ваших данных намного проще и масштабируемым, и вам не нужно будет сильно менять код на стороне сервера при добавлении новых полей.

Вы можете написать код на клиентах, которые выполняют работу по отображению пар значений обратно в реальную структуру, и тогда большая часть изменений кода (при добавлении поля) будет изолирована для ваших клиентов. Кроме того, если вашим клиентам не нужны новые поля, вы можете просто игнорировать изменения, ничего не нарушая.

...