2010-03-17 37 views
0

我正在Mate框架之上開發Flex應用程序。 在這個應用程序中,我使用web服務來檢索數據。
由於此webservice不是修復的位置URL(取決於客戶安裝的位置),我在配置文件中定義了此URL。 當Flex應用程序啓動時,它首先讀取這個配置文件,然後我想使用我發現的值來初始化webservice。
但目前,我不知道如何做到這一點。使用Flex和Mate框架在運行時初始化webservice WSDL

這裏是我的EventMap.mxml

<EventMap> 
<services:Services id="services" /> 

<EventHandlers type="{FlexEvent.PREINITIALIZE}">   
    <HTTPServiceInvoker instance="{services.configService}"> 
     <resultHandlers> 
      <MethodInvoker generator="{ConfigManager}" method="loadFromXml" arguments="{resultObject}" /> 
     </resultHandlers> 
     <faultHandlers> 
      <InlineInvoker method="Alert.show" arguments="ERROR: Unable to load config.xml !" /> 
     </faultHandlers>    
    </HTTPServiceInvoker> 

在這一部分中,CONFIGMANAGER解析配置文件和intitialize稱爲webServiceWsdl

這裏可綁定屬性是我Services.mxml

<mx:Object> 
<mx:Script> 
<![CDATA[ 
    [Bindable] public var webservice:String; 
]]> 
</mx:Script> 

<mx:HTTPService id="configService" url="config.xml" useProxy="false" /> 
<mx:WebService id="dataService" wsdl="{webservice}" useProxy="false"/> 
</mx:Object> 

如何初始化此webservice pro perty?

回答

0

創建一個單例類來封裝您的配置選項,並將單例實例上的一個屬性綁定到您的服務定義中。我們做到這一點。

[Bindable] 
class Config 
{ 
    private static var instance:Config; 

    public static function getInstance():Config { 
     if (!instance) 
      instance = new Config(); 
     return instance; 
    } 

    public var WEBSERVICE:String = "default value"; 
} 

在Services.mxml:

<mx:WebService id="dataService" wsdl="{Config.getInstance().WEBSERVICE}" useProxy="false"/> 

很顯然,你需要在加載該文件中的配置來更新你的配置實例。

+0

對不起,我遲到的答案。正如普雷斯頓所說,我沒有看到我所做的和您的解決方案之間有什麼巨大差異。 此外,我很不情願使用Flex的單身人士 – GroovyB 2010-04-06 11:38:27

+0

也許我誤解了你的問題。但是你說過你「不知道該怎麼做」,所以我認爲你發佈的代碼不起作用。我在這裏發佈的解決方案是我多次成功使用的解決方案。其他好處是您可以創建一個描述配置變量的靜態API,並將您的配置從事件映射中分離出來。這是我書中更好的因子。你有什麼反對單身人士?乾杯。 – lach 2010-04-07 01:23:36

0

我不明白這與所討論的不同。一個是可綁定的字符串,另一個是Bindable對象。

我發現當(在上例中)與Web服務的wsdl參數關聯的可綁定字符串發生更改時,Web服務從不更新。因此,如果字符串的值不正確,那麼web服務將發出錯誤,無法找到wsdl,並且將永遠不會再嘗試......即使字符串更改了值。

普雷斯頓

0

可以使用此:

WebService.loadWSDL(runtimeWsdl) ; 

哪裏runtimeWsdl是含有動態WSDL值的String類型變量。