2009-06-13 54 views
3

我們的兩個應用程序是具有Flex 3前端和SOAP風格的WCF後端的Web應用程序。爲了與後端進行通信,我通過Flex Builder 3生成了Web服務客戶端類。一切都很實用,但是維護這些生成的類非常煩人,我正在尋找一種更好的方式來做事情(無需做大型當然重寫)。這裏的問題:從用於Flex的WSDL創建可綁定的類3

  1. 我使用Flex庫來管理應用程序之間共享的組件。其中一些依賴於生成的類,所以我需要在自己的庫中使用WSDL生成的類。但是,Flex Builder 3僅生成Flex 應用程序的類,因此必須在應用程序的源代碼樹中生成文件,然後每次手動移動這些文件。這也引入了Eclipse管理源代碼的奇怪副作用(爲什麼不能像其他IDE一樣監視FS?)。
  2. 我們在MXML中使用數據綁定來聲明性地將數據綁定到UI。我數據綁定。不幸的是,WSDL生成的代碼中的類不支持綁定。因此,我選擇創建一個程序來改變ActionScript類,向它們添加[Bindable]元數據。這必須在我們每次重新生成代碼時運行。
  3. Flex有一個非常討厭的bug,至少自3月以來就已知了,但仍然沒有被修復:http://bugs.adobe.com/jira/browse/SDK-19811。我最近發現這一點,因爲它將<和&等一些XML字符雙重編碼爲​​<和&。因此,我還必須爲ActionScript操作程序添加一個解決方法。
  4. Flex Builder中的WSDL代碼生成器創建一個字符串,布爾值,Int和其他類,它們是內置類型!我們總是不得不刪除這些源文件,以防止Flex編譯器有時不起作用。

對我來說,似乎不太可能每個人都只是在處理這些問題。必須有一些替代方法來爲其他人正在使用的Flex生成Web服務代理類。由於我無法在Silverlight中使通信層RESTful並重寫前端,因此您有什麼建議?

回答

1

您可以使用幾種機制之一將WSDL讀入程序並生成您需要的任何flex代碼。

  1. 您可以使用兩個ServiceDescription類中的一個來讀取WSDL並根據對象模型檢查其內容;
  2. 您可以在Visual Studio中使用T4模板,用一位的定製工作,揭露WSDL到模板(可能通過和serviceDescription類,如上)
  3. 您可以使用XSLT將WSDL轉換成你的代碼」 d像
  4. 您可以編寫一些獨立的程序來讀取WSDL(作爲XML或對象模型),並只發送代理代碼所需的文本。

底線是,如果您遇到了自動化工具的問題,那麼您可以創建自己的實用方法。

1

不幸的是,來自WSDL的Flex 3代碼生成缺乏Bindable標記,手動處理這個問題是一場噩夢......特別是如果您有一個複雜的場景,有很多類型。

你可以隻手動添加標記並移除所有變量聲明「generated.webservices」爲了使代碼編譯...然後你有另外一個問題:

如果我有產生再次輸入密碼?任我再次盡一切......或者我將有一堆運行時才能檢測蟲子......

我用ANT一個小竅門:

添加可綁定的所有類; 從所有變量聲明中刪除完整的名稱空間;

<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。」在你的情況下可能會有所不同,所以你可能想用你生成的命名空間替換它。

它到目前爲止工作。

希望它可以幫助別人!

安東尼奧伊納西奧

+0

我張貼螞蟻規則,但它沒有顯示:P – 2010-10-27 23:14:13