从WSDL for Flex 3创建可绑定类

时间:2009-06-13 18:56:30

标签: wcf actionscript-3 data-binding flex3 wsdl

我们的两个应用程序是具有Flex 3前端和SOAP样式WCF后端的Web应用程序。为了与后端进行通信,我通过Flex Builder 3生成Web服务客户端类。一切正常,但维护这些生成的类非常烦人,我正在寻找一种更好的方法来做事(无需做专业当然要重写。这是问题所在:

  1. 我使用Flex库来管理应用程序之间共享的组件。其中一些依赖于生成的类,因此我需要在自己的库中使用WSDL生成的类。但是,Flex Builder 3仅为Flex 应用程序生成类,因此我必须在应用程序的源树中生成文件,然后每次手动移动文件。这也引入了Eclipse管理源代码的方式的奇怪副作用(为什么不能像其他IDE一样监视FS?)。
  2. 我们在MXML中使用数据绑定来声明性地将数据绑定到UI。我喜欢数据绑定。不幸的是,WSDL生成的代码中的类不支持绑定。因此,我选择创建一个程序来更改ActionScript类,向它们添加[Bindable]元数据。每次重新生成代码时都必须运行它。
  3. Flex有一个非常讨厌的错误,至少从三月开始就知道了,但仍然没有修复:http://bugs.adobe.com/jira/browse/SDK-19811。我最近发现了这个,因为它是对一些XML字符进行双重编码,例如<和&进入<和&amp ;.因此,我还必须为ActionScript操作程序添加一个解决方法。
  4. Flex Builder中的WSDL代码生成器创建String,Boolean,Int和其他类,这些类是内置类型!我们总是不得不删除这些源文件,以防止Flex编译器有时不习惯。
  5. 似乎每个人都只是忍受这些问题。必须有一些替代方法来为其他人使用的Flex生成Web服务代理类。由于我被时间禁止使用RESTful通信层并重写前端,你有什么建议?

2 个答案:

答案 0 :(得分:1)

您可以使用多种机制之一将WSDL读入程序并生成所需的任何Flex代码。

  1. 您可以使用两个ServiceDescription类之一来读入WSDL并根据对象模型检查其内容;
  2. 您可以在Visual Studio中使用T4模板,通过一些自定义工作将WSDL公开给模板(可能通过ServiceDescription类,如上所述)
  3. 您可以使用XSLT将WSDL转换为您想要的代码
  4. 您可以编写一些独立的程序来读取WSDL(作为XML或对象模型),然后只发出代理代码所需的文本。
  5. 最重要的是,如果您遇到自动化工具问题,那么可以通过实际方法创建自己的工具。

答案 1 :(得分:1)

不幸的是,WSDL中的Flex 3代码生成缺少Bindable标记,手动处理该问题是一场噩梦...尤其是如果你有一个包含大量类型的复杂场景。

您可以手动添加标记并从所有变量声明中删除“generated.webservices”以使代码编译...然后您还有另一个问题:

如果我必须再次生成de代码怎么办?要么我再做一切......或者我将有一堆运行时只检测到错误......

我使用ANT进行了一个小技巧:

将Bindable添加到所有类; 从所有变量声明中删除完整的命名空间;

<target name="updateGeneratedCode" >
    <replace dir="PATH TO YOUR GENERATED CODE">
        <include name="**/*.as"/>
        <replacetoken>public class</replacetoken>
        <replacevalue><![CDATA[[Bindable]public class]]></replacevalue>   
    </replace>

    <replace dir="PATH TO YOUR GENERATED CODE" value=":">
        <include name="**/*.as"/>
        <replacetoken>:generated.webservices.</replacetoken>
    </replace>
</target>

注意:替换令牌“:generated.webservices”。在您的情况下可能会有所不同,因此您可能希望用生成的命名空间替换它。

到目前为止,它对我有用。

希望它有所帮助!

Antonio Inacio