2009-08-17 72 views
1

我们有Flex应用程序连接到我们的ASP.NET 3.5 Web应用程序,并且通常会下载大量数据。现在考虑XML作为传输,对于每个项目,它传输元数据两次例如..而不是传输int值为<Customer CustomerID=23/>它传输<Customer><CustomerID>23</CustomerID></Customer> ..现在这里是带宽保存成为一个问题。ASP.NET 3.5 Flex的WebService压缩

  1. FLEX无法读取gzip和deflate压缩HTTP响应(所以不能使用其中的任何)
  2. 我听说过一些WSCompression但它需要WSE 3.0现在我将信将疑地介绍我的托管环境中过多的依赖这需要太多的管理和开销。 WSE 3.0只有在生产服务器上不需要安装的dll库吗?是否需要重写所有WebService属性?或者它是简单的一次性配置,或多或少,任何人都知道它与Flex的工作?
  3. Flex动态生成Web服务,我们使用它的很多自动生成的代码,现在如果我们想要支持压缩,那么我们是否需要重写很多代码?

我能想到的最简单的解决方案是,减少不必要的XML标签并将它们降低到属性以节省带宽。是否有一种简单的方法来实现它,我们的类拥有超过50-70个属性,我知道为每个属性添加属性将是噩梦,但我们不知道如何在SOAP中执行此属性。

问:

  1. 什么是WSE 3.0无论如何,它需要将生产服务器上安装?为了实现WSCompression,我们需要将附加代码集成到我们的Web服务代码中,就像每个WebMethod属性一样,我们是否需要在属性中添加更多代码?

  2. 有没有一种简单的方法来标记属性的属性,迫使序列化简单的形式,例如[SoapAttribute],其将数据作为属性,而不是标签和它与FLEX工作还是会与任何客户端的工作?

  3. SOAP是否只有元素的标准格式,或者它可以支持属性?

+0

**绝不**使用WSE !!! WSE已经过时,并已被WCF取代。 – 2009-08-17 10:10:15

+0

WSCompression仅支持通过WSE,我们不能使用WCF,因为我们的客户端不是.NET,它的FLEX。我们想要使用纯粹的Web服务,我们不希望只使用微软的代码。 – 2009-08-17 10:20:37

+0

WCF完全支持纯Web服务!是什么让你认为它只支持微软的代码?它是ASMX和WSE的替代品!如果它没有互操作,那意味着微软完全放弃了互操作性! – 2009-08-17 15:23:15

回答

1

终于让我找到解决办法通过使用XmlAttribute

[XmlAttribute] 
public long CustomerID; 

强制场序列化为SoapAttribute的“属性”,然而MSDN文档说,下面的“应用SoapAttributeAttribute到公共领域来指定XmlSerializer的序列化领域作为XML属性。“并根据SOAP标准,它应该这样做,但它不!

0

SOAP支持属性和元素。

+0

那么微软再次,从来不支持标准的100%,我申请了[SoapAttribute]到一个类的所有属性,尝试过各种组合,序列化总是在元素中,它并没有在属性中做到这一点! – 2009-08-17 10:40:37

+0

好的,正如记载的[SoapAttribute]应该工作,但它没有,而是[XmlAttribute]的作品,仍然需要检查FLEX中的实现细节..我会检查一切后更新答案。 – 2009-08-17 10:48:10

+0

请仔细阅读文件。我知道这很让人困惑,但是[SoapAttribute]不适合你的情况。请注意http://msdn.microsoft.com/en-us/library/system.xml.serialization.soapattributeattribute.aspx上的示例,并与http://msdn.microsoft.com/en-us/library/system进行比较。 xml.serialization.xmlattributeattribute.aspx。 – 2009-08-17 15:20:57