使用Flex和Mate框架在运行时初始化webservice WSDL

时间:2010-03-17 07:29:49

标签: flex web-services wsdl mate

我正在Mate框架之上开发Flex应用程序。 在这个应用程序中,我使用Web服务来检索数据 由于此Web服务不是修复位置URL(取决于客户安装它的位置),我在配置文件中定义此URL。 当Flex应用程序启动时,它首先读取此配置文件,然后我想使用我发现的值初始化Web服务。
但目前,我不知道如何做到这一点。

这是我的 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解析配置文件并初始化一个名为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属性?

3 个答案:

答案 0 :(得分: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"/>

显然,当您从文件加载配置时,需要更新配置实例。

答案 1 :(得分:0)

我没有看到这与有问题的人有什么不同。一个是可绑定的String,另一个是Bindable对象。

我发现当(在上面的示例中)与Web服务的wsdl参数关联的可绑定字符串发生更改时,Web服务永远不会更新。

因此,如果字符串的值不正确,那么Web服务将会出错而无法找到wsdl,并且永远不会再尝试...即使字符串更改值。

普雷斯顿

答案 2 :(得分:0)

您可以使用:

WebService.loadWSDL(runtimeWsdl) ;

其中runtimeWsdl是包含动态wsdl值的String类型变量。