Инициализация веб-службы WSDL во время выполнения с использованием инфраструктуры Flex и Mate - PullRequest
0 голосов
/ 17 марта 2010

Я занимаюсь разработкой приложения Flex поверх фреймворка Mate. В этом приложении я использую веб-сервис для извлечения данных.
Поскольку этот веб-сервис не является URL-адресом с фиксированным местоположением (в зависимости от того, где его установили клиенты), я определяю этот URL-адрес в файле конфигурации. Когда приложение Flex запускается, оно сначала читает этот файл конфигурации, а затем я хотел бы использовать найденное мной значение для инициализации веб-службы.
Но в настоящее время я понятия не имею, как это сделать.

Вот мой 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>

Как я могу инициализировать это свойство веб-сервиса?

Ответы [ 3 ]

0 голосов
/ 05 апреля 2010

Я не вижу, чем это отличается от рассматриваемого. Одна из них является связываемой строкой, а другая - привязываемым объектом.

Я обнаружил, что когда (в приведенном выше примере) изменяется привязываемая строка, связанная с параметром wsdl веб-службы, веб-служба никогда не обновляется.

Таким образом, если значение строки неверно вне шлюза, веб-служба выдаст ошибку, не найдя wsdl, и никогда не будет пытаться повторить ... даже когда строка изменяет значение.

Preston

0 голосов
/ 05 августа 2010

Вы можете использовать это:

WebService.loadWSDL(runtimeWsdl) ;

Где runtimeWsdl - переменная типа String, содержащая динамическое значение wsdl.

0 голосов
/ 17 марта 2010

Создайте одноэлементный класс, чтобы инкапсулировать ваши параметры конфигурации и связать свойство экземпляра синглтона с определением вашей службы. Мы делаем это честно.

[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";
}

In Services.mxml:

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

Очевидно, вам необходимо обновить ваш экземпляр конфигурации при загрузке конфигурации из файла.

...