0

我正在开发一个主要基于 ASP.NET 的项目。主项目旨在为不同的客户端部署到多个位置,因此一个客户端可能位于 website.com/client1 和另一个位于 website.com/client2。在应用程序中,我们经常使用应用程序根运算符~来获取资源的路径。

我们还部署了一堆 Flex 应用程序,其中许多依赖于 ASP.NET 应用程序中的 Web 服务。我所追求的是一种引用相对于应用程序根的服务的方法。以下是两个客户端部署的一些文件位置的示例:

  • 客户A
    • website.com/clientA/swf/FlexApplication.swf
    • website.com/clientA/services/webService.asmx
  • 客户 B
    • website.com/clientB/swf/FlexApplication.swf
    • website.com/clientB/services/webService.asmx

FlexApplication 和 webService 都是完全一样的,所以我想做的是在 Flex 代码中是这样的:

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

出于通常的原因,我想避免使用相对路径。有没有一种好方法可以做到这一点,或者有一种从 ASP.NET 将根 url 传递给 flex 应用程序的好方法?提前致谢。

4

3 回答 3

1

避免使用相对 URL 绝对是个好主意。最简单的方法是在 HTML embed 语句中通过 Flash Vars 传递信息。

查看 Adob​​e 关于将 FlashVars 与 Flex 结合使用的文档:http: //livedocs.adobe.com/flex/3/html/help.html?content= passingarguments_3.html

概括:

在 HTML embed 语句中添加一行,如下所示:

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

然后通过 mx.core.Application.application.parameters 访问器在 Flex 中访问它

import mx.core.Application;

var parameters:Object = Application.application.parameters;
var serviceRoot:String = parameters['serviceRoot'];
于 2011-02-21T20:58:15.857 回答
1

相对于应用程序根

Flex 对 ASP.NET 应用程序的应用程序根一无所知。Flex 应用程序唯一知道的是提供它的 URL。它不知道页面的 URL。请记住,页面的 URL 和 SWF 的 URL 并不相同。

根据您的目录结构,您可以使用 SWF 的 URL 来获取您所需要的信息。

在 Flex 3 应用程序中,您可以使用Application 标签的url属性:

(Application.application as Application).url 

在 Flex 4 Spark 应用程序中,您还可以使用 Application Tag 的url属性,但您必须以不同的方式获取它:

(FlexGlobals.topLevelApplication as Application).url 

然后你可以用URLUtils解析它来得到你的目录结构。可能以某种方式将它作为全局变量存储在您的 Flex 应用程序中,并使用它来构造您对远程服务器进行的服务调用的 URL。

于 2011-02-21T21:05:27.113 回答
0

我使用这个方便的小实用程序通过 .swf 中的 javascript 获取 URL 信息。

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

于 2011-02-21T21:14:19.150 回答