ASP.NET WebService, как сделать структуру воспринимаемой как примитивный тип для WSDL и сериализации - PullRequest
1 голос
/ 11 августа 2010

Этот вопрос может иметь несколько аспектов, поэтому, пожалуйста, прочитайте сначала.

Предположим, что у вас есть структура с несколькими небольшими целочисленными значениями, которая хорошо упаковывается в Int64, и в то время как вы хотите использовать свою структуру как тип в C #вы хотите, чтобы он отображался как In64 через веб-методы - так, чтобы WSDL имел его, и вы сохраняли базовую способность REST (простые типы делают возможным вызов GET).

Наиболее близким к тому, что я обнаружил, является SqlDateTime- он автоматически трансформируется в dateTime в WSDL (есть атрибут, который, кажется, управляет эквивалентностью типов XSD / WSDL плюс IXmlSerializable), но этого недостаточно.Веб-метод по-прежнему распознается как «имеющий сложные параметры» и, следовательно, становится недоступным для запросов GET.

Обновление: при вызовах XSD / WSDL и SOAP соблюдение эквивалентности типов выполняется совершенно нормально - проблема заключается в вызове GET- путь URL RESTful не генерируется вообще.

Поиск информации о возможных дополнительных атрибутах, интерфейсах, точках подключения, если кто-то наткнулся на структуру или внутренний класс, которому удалосьвыполнить полную эквивалентность типов с любым «примитивным» скалярным типом (DayTime не совсем примитивен, но все же получает такую ​​обработку).Также, если soemone знает способ установить более сильную эквивалентность типов или добавить / пометить структуру, которая будет рассматриваться как простой (скалярный) тип значения - еще лучше.

Пожалуйста, не пишите, просто чтобы сказать что-нибудь противное или проповедовать частную идеологию. Это серьезный вопрос, относящийся к серой зоне, для людей, которые знают свой путь в Reflector и читают код. Если вы думаете, что можете идеологизировать это, у вас даже нет понятия о проблеме.Однако, если вы можете указать на реальный код, который вызывает / принимает решение о том, что будет обслуживаться с помощью GET-запроса, пожалуйста, отправьте сообщение, даже если этим вы докажете невозможность расширения эквивалентности типов для GET-запросов.

Oh и CLR2.x / 3.x.

Спасибо тем, кто помогает, и тем, кто не мешает.

1 Ответ

0 голосов
/ 11 августа 2010

Это не выполнимо.

С чего бы это? Вы говорите о вопиющем взломе. С какой стати .NET когда-либо поддерживал или разрешал это?

Единственное, что вы сможете сделать, - это реализовать интерфейс IXmlSerializable в своей структуре, чтобы вы могли выполнять сериализацию и десериализацию самостоятельно.

...