Сжатие веб-служб ASP.NET 3.5 для Flex

У нас есть приложения Flex, которые подключаются к нашим веб-приложениям ASP.NET 3.5 и обычно загружают много данных. Теперь, рассматривая XML как транспорт, для каждого элемента он передает метаданные дважды, например ... вместо того, чтобы передавать значение int как <Customer CustomerID=23/>, он передает <Customer><CustomerID>23</CustomerID></Customer> ... вот где сохранение полосы пропускания становится проблемой.

  1. FLEX не может читать GZip и DEFLATE сжатый HTTP-ответ (поэтому не могу использовать ни один из них)
  2. Я слышал о некоторых WSCompression, но теперь для этого требуется WSE 3.0. Я скептически отношусь к тому, чтобы вводить слишком много зависимостей в мою среду хостинга, которая требует слишком большого управления и накладных расходов. Является ли WSE 3.0 только библиотекой dll, которая не требует установки на производственном сервере? Требуется ли перезапись всего WebService атрибута? Или это простая одноразовая конфигурация и, более или менее, кто-нибудь знает, работает ли она с Flex?
  3. Flex динамически генерирует веб-службы, и мы используем много его автоматически сгенерированного кода. Теперь, если мы хотим поддерживать сжатие, нужно ли нам переписывать много кода?

Самое простое решение, которое я могу придумать, - уменьшить количество ненужных тегов XML и преобразовать их в атрибуты для экономии полосы пропускания. Есть ли простой способ добиться этого, наши классы имеют более 50-70 свойств, я понимаю, что будет кошмаром добавлять атрибуты к каждому свойству, но мы не знаем, как это сделать в случае SOAP.

Вопрос:

  1. В любом случае, что такое WSE 3.0, нужно ли его устанавливать на рабочий сервер? Чтобы включить WSCompression, нужен ли нам дополнительный код для интеграции в код нашей веб-службы, например, с каждым атрибутом WebMethod, нужно ли нам добавлять дополнительный код в атрибуты?

  2. Есть ли простой способ пометить свойства атрибутами и принудительно сериализовать его в простой форме, например [SoapAttribute], который преобразует данные как атрибут вместо тега и работает ли он с FLEX или будет работать с любым клиентом?

  3. Имеет ли SOAP стандартный формат только элементов или он может поддерживать атрибуты?


person Akash Kava    schedule 17.08.2009    source источник
comment
НИКОГДА не используйте WSE !!! WSE устарел и был заменен на WCF.   -  person John Saunders    schedule 17.08.2009
comment
WSCompression поддерживается только через WSE, и мы не можем использовать WCF, потому что наш клиент не .NET, а его FLEX. Мы хотим использовать чистые веб-сервисы и не хотим придерживаться только кода Microsoft.   -  person Akash Kava    schedule 17.08.2009
comment
WCF полностью поддерживает чистые веб-сервисы! Почему вы думаете, что он поддерживает только код Microsoft? Это замена ASMX и WSE! Если бы он не взаимодействовал, это означало бы, что Microsoft полностью отказалась от взаимодействия!   -  person John Saunders    schedule 17.08.2009


Ответы (2)


Наконец, я нашел обходной путь с помощью XmlAttribute

[XmlAttribute]
public long CustomerID;

Заставляет поле быть сериализованным как «Атрибут», однако в документации MSDN SoapAttribute говорится следующее: «Примените SoapAttributeAttribute к общедоступному полю, чтобы указать, что XmlSerializer сериализует поле как атрибут XML». и согласно стандарту SOAP он должен это делать, но это не так !!

person Akash Kava    schedule 18.08.2009

SOAP поддерживает атрибуты, а также элементы.

person John Saunders    schedule 17.08.2009
comment
Что ж, снова Microsoft, никогда не поддерживала стандартные 100%, я применил [SoapAttribute] ко всем свойствам одного класса, пробовал различные комбинации, сериализация всегда выполняется в элементах, а не в атрибутах !!! - person Akash Kava; 17.08.2009
comment
Хорошо, как указано в документации, [SoapAttribute] должен работать, но он не работает, вместо этого работает [XmlAttribute], что ж, еще нужно проверить детали реализации в FLEX .. Я обновлю ответ, как только я все проверил. - person Akash Kava; 17.08.2009
comment
Пожалуйста, прочтите внимательно документацию. Я знаю, что это сбивает с толку, но [SoapAttribute] не предназначен для работы в вашей ситуации. Обратите внимание на пример на msdn.microsoft.com/en- us / library / и сравните с msdn .microsoft.com / en-us / library /. - person John Saunders; 17.08.2009
comment
Кроме того, из любопытства, какое отношение [SoapAttribute] к поддержке какого-либо стандарта? - person John Saunders; 17.08.2009