Получение корневого пути ASP.NET к Flex? - PullRequest
0 голосов
/ 21 февраля 2011

Я работаю над проектом, который в основном основан на ASP.NET. Основной проект предназначен для развертывания в разных местах для разных клиентов, поэтому один клиент может быть расположен по адресу website.com/client1, а другой - по адресу website.com/client2. В приложении мы регулярно используем корневой оператор приложения ~ для получения пути к ресурсу.

У нас также есть несколько приложений Flex, которые там развернуты, и многие полагаются на веб-службы в приложении ASP.NET. Что мне нужно, так это способ ссылки на сервисы относительно корня приложения. Вот пример расположения некоторых файлов для двух клиентских развертываний:

  • Клиент А
    • website.com / Clientâ / SWF / FlexApplication.swf
    • website.com / Clientâ / услуги / webService.asmx
  • Клиент Б
    • website.com / clientB / SWF / FlexApplication.swf
    • website.com / clientB / услуги / webService.asmx

FlexApplication и webService абсолютно одинаковы, поэтому я хочу сделать что-то подобное в коде Flex:

var myService:CustomService = new CustomService(~/services/webService.asmx);
myService.callMethod("Test");

Я бы хотел избежать использования относительных путей по обычным причинам. Есть ли хороший способ сделать это или хороший способ передать корневой URL-адрес Flex-приложения из ASP.NET? Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 22 февраля 2011

относительно корня приложения

Flex ничего не знает о корневом каталоге приложения ASP.NET. Единственное, что приложение Flex знает, - это URL, с которого оно обслуживается. Он не знает URL страницы. Помните, что URL-адрес страницы и URL-адрес SWF-файла не совпадают.

Судя по структуре каталогов, вы можете использовать URL SWF для получения информации, которую вы ищете.

В приложении Flex 3 вы можете использовать свойство url тега Application:

(Application.application as Application).url 

В приложении Flex 4 Spark вы также можете использовать свойство url тега приложения, но вы должны получить его по-другому:

(FlexGlobals.topLevelApplication as Application).url 

Затем вы можете проанализировать его с помощью URLUtils , чтобы получить структуру каталогов. Возможно, храните его как глобальную переменную в своем приложении Flex и используйте его для создания URL-адреса для вызовов службы, которые вы делаете на удаленный сервер.

1 голос
/ 21 февраля 2011

Это определенно хорошая идея избегать относительных URL. Самый простой способ - передать информацию через Flash Vars в операторе встраивания HTML.

Ознакомьтесь с документацией Adobe по использованию FlashVars с Flex: http://livedocs.adobe.com/flex/3/html/help.html?content=passingarguments_3.html

Описание:

Добавьте строку в оператор HTML для встраивания следующим образом:

<param name='flashVars' value='serviceRoot=/myserviceRoot'/>

Затем получите доступ к нему во Flex с помощью средства доступа mx.core.Application.application.parameters

import mx.core.Application;

var parameters:Object = Application.application.parameters;
var serviceRoot:String = parameters['serviceRoot'];
0 голосов
/ 22 февраля 2011

Я использую эту удобную маленькую утилиту для получения информации об URL через javascript внутри .swf.

http://www.flexpasta.com/index.php/category/utility-classes-that-help-you-deal-with-string-numbers-arrays-and-objects-in-actionscript/

...