Flash Builder (мобильная версия) — динамический URL-адрес веб-службы

Для моего проекта Flash Builder 4.6 у меня определена служба http, которая просматривает URL-адрес нашего веб-сайта.

Что я хотел бы сделать, так это изменить URL-адрес веб-службы на лету в приложении. т. е. используя существующий URL-адрес по умолчанию, но имея экран администратора/настроек для изменения того, куда указывает веб-служба (хранится либо в нашей базе данных sqlite, либо в локальной памяти).

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

Кто-нибудь имел опыт в этом?

РЕДАКТИРОВАТЬ: добавление дополнительных деталей после комментариев ниже.

Когда я создал службу HTTP с помощью мастера FlashBuilder, он создает два класса веб-служб: суперкласс и подкласс, который наследуется от суперкласса. Весь код, который заполняет мастер, попадает в суперкласс.

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

Ниже приведен пример конструктора Super:

// initialize service control
    _serviceControl = new mx.rpc.http.HTTPMultiService("websitehere");
     var operations:Array = new Array();
     var operation:mx.rpc.http.Operation;
     var argsArray:Array;

     operation = new mx.rpc.http.Operation(null, "loginRequest");
     operation.url = "login.php";
     operation.method = "GET";
     argsArray = new Array("un","pw");
     operation.argumentNames = argsArray;         
     operation.serializationFilter = serializer0;
     operation.properties = new Object();
     operation.properties["xPath"] = "/";
     operation.contentType = "application/x-www-form-urlencoded";
     operation.resultType = valueObjects.Data;
     operations.push(operation);
_serviceControl.operationList = operations;  

Я не уверен, какое свойство переменной _serviceControl мне нужно изменить.

Кроме того, когда я ищу свой веб-сайт в своем коде, он возвращает файл .fml внутри каталога .model, который, кажется, автоматически обновляется, если я изменяю URL-адрес службы с помощью мастера. Не вызовет ли это проблемы?

Затем у меня возникает проблема доступа к пользовательскому URL-адресу. В приложении мы используем базу данных sqlite для хранения данных, но я думаю, что, вероятно, было бы лучше использовать «SharedObject», который мы также используем, чтобы узнать, в какую учетную запись они вошли. Насколько это надежно? Я предполагаю, что смогу получить к этому доступ через Сервис?

Хотя неудобно то, что мы планировали настроить это на экране настроек, к которому можно было бы получить доступ после входа в систему. Но для входа в систему уже нужно было бы знать, на какой сервер указывать.


person Rjs37    schedule 29.05.2012    source источник
comment
Какова ваша конкретная проблема? То, что вы описываете, легко достижимо, но ваш вопрос слишком широк.   -  person RIAstar    schedule 29.05.2012
comment
Я создал динамические/изменяемые URL-адреса из своего приложения различными способами. Расскажите нам, что вы проверили и почему это не работает, и, возможно, мы сможем помочь более подробно.   -  person JeffryHouser    schedule 29.05.2012
comment
Извиняюсь за это, я отредактировал исходный вопрос, добавив некоторые дополнительные сведения и образец кода того, что сгенерировал мастер FlashBuilder, а также некоторые более конкретные вопросы о том, является ли использование SharedObject правильным путем, и как бы я изменил подкласс сервис.   -  person Rjs37    schedule 31.05.2012


Ответы (2)


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

Это очень легко сделать и еще проще, если вы используете петрушку/спайслиб.

несколько пунктов

  1. не изменяйте код в суперфайле, он будет перезаписан при каждом обновлении службы. изменить все в своем сгенерированном подклассе.

  2. Общие объекты очень хороши для небольших объемов данных, но никогда не должны использоваться для массивных наборов данных, т.е. для хранения большого набора массивов.

В любом случае, вот как я этого добиваюсь.

В подклассе вы можете изменить функцию конструктора.

Вот как я изменяю свои URL-адреса на основе переменной конфигурации, но вместо этого вы можете так же легко использовать SharedObject.

public function SubClassConstructor(){
    if(CONFIG::DOMAIN_IDENT == "development" || CONFIG::DOMAIN_IDENT == "dev" || CONFIG::DOMAIN_IDENT == "d"){
        _serviceControl.endpoint = "http://yoururl1";
    }
    else if(CONFIG::DOMAIN_IDENT == "production" || CONFIG::DOMAIN_IDENT == "prod" || CONFIG::DOMAIN_IDENT == "p"){
        _serviceControl.endpoint = "http://yoururl2";
    }

} 

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

Спросите, нужна ли вам дополнительная помощь или руководство.

person cghrmauritius    schedule 06.07.2012
comment
Я проголосовал за ваш ответ, поскольку вы определенно указали мне правильное направление, хотя для меня конечная точка не была определена. Итак, я опубликовал свой окончательный код в качестве ответа. Вместо этого мне пришлось использовать свойство baseUrl, которое, казалось, работало так, как предполагалось. Я не помещал общий объект, но это не будет сложной частью. Я просто не знал, как программно переопределить URL-адрес. Я добавил дополнительный ответ с окончательным кодом, который я использовал. - person Rjs37; 27.07.2012

Поскольку решение cghrmauritius не совсем сработало для меня, я публикую окончательное решение, которое сработало в моей ситуации.

public function subConstructor()
{
    super();
    _serviceControl.baseURL = "http://url1";
}

Очевидно, что для моего окончательного решения мне также нужно реализовать объект общего доступа, но переопределение URL-адреса было моим главным приоритетом.

person Rjs37    schedule 27.07.2012