【问题标题】:Initialize webservice WSDL at runtime using Flex and Mate framework使用 Flex 和 Mate 框架在运行时初始化 webservice WSDL
【发布时间】:2011-03-11 08:35:54
【问题描述】:

我正在 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>

如何初始化这个网络服务属性?

【问题讨论】:

    标签: apache-flex web-services wsdl mate


    【解决方案1】:

    创建一个单例类来封装您的配置选项并将单例实例上的属性绑定到您的服务定义中。我们做得很好。

    [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"/>
    

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

    【讨论】:

    • 对不起,我的回答迟了。正如普雷斯顿所说,我认为我所做的与您的解决方案之间没有任何巨大差异。此外,我非常不愿意在 Flex 中使用单例
    • 也许我误解了你的问题。但是您说您“不知道该怎么做”,所以我认为您发布的代码不起作用。我在这里发布的解决方案是我在很多场合都成功使用过的解决方案。其他好处是您可以创建一个描述配置变量的静态 API,并将配置与事件映射分开。这是我书中更好的考虑因素。你有什么反对单身的?干杯。
    【解决方案2】:

    我看不出这与所讨论的有什么不同。一个是可绑定字符串,另一个是可绑定对象。

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

    因此,如果字符串的值不正确,Web 服务将报错,无法找到 wsdl,并且永远不会重试……即使字符串更改了值。

    普雷斯顿

    【讨论】:

      【解决方案3】:

      你可以用这个:

      WebService.loadWSDL(runtimeWsdl) ;
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-11
        • 2010-10-03
        • 2023-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多