如何通过flashvars更改Web服务URL

时间:2010-11-13 02:49:32

标签: flex

我正在使用部署在SAP Web Application Server上的Web服务来创建一些图表。在将我的FLEX应用程序从开发人员迁移到QA时,我还希望在flex中更改目标Web服务的地址,以便他们从QA访问Web服务。我所做的是将目标服务器地址添加为URL参数,并在Flex中将这些URL参数添加为flashvars。

var wsdlUrl = window.location.search.substring(1);
flashvars.serverUrl = wsdlUrl;

现在我尝试在声明webservice

期间访问flashvars
<fx:Declarations>
<cscustomreportservice:CSCustomReportService 
id="cSCustomReportService" useProxy="false" wsdl="{FlexGlobals.topLevelApplication.parameters.serverUrl}" 
fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)" showBusyCursor="true"/>
...
</fx:Declarations>

但是在宣布时间内,flashvars无法访问。

有没有办法可以在运行时传递服务器URL,以便无论如何都不需要在Flex应用程序中对URL进行硬编码?

祝你好运, 纳库尔

2 个答案:

答案 0 :(得分:1)

转到<your application path>\src\services

在services文件夹中,会有一个包含服务名称的文件夹。在这个文件夹中,将有2个文件,其中打开名称以“_”(下划线)开头的文件。

在此文件中,您可以修改链接/ URL。

答案 1 :(得分:0)

您可以使用src文件夹下的Custom Config.xml文件来实现此目的。 在您的应用程序中,main.mxml具有可在整个应用程序中访问的静态var。

public static var endpointUrl:String;

对config.xml进行HTTPService调用

<mx:HTTPService id="configSrv"
                url="config.xml"
                resultFormat="e4x"
                result="configResultHandler(event)"/>

结果Handler会将config.xml中的值设置为endPointUrl

//For calling the webservice uri end point
        private function configResultHandler(event:ResultEvent):String
        {
            var xml:XML=event.result as XML;
            var endPointURL:String="" + xml..channel.(@id == "endpoint").@endpoint;
            if (endPointURL == "")
            {
                Alert.show("End Point not configured", "Error");
                return null;
            }
            Security.allowDomain(endPointURL);
            return endPointURL;
        }

现在,在你的标签中你可以像这样调用静态变量

<cscustomreportservice:CSCustomReportService id="cSCustomReportService" useProxy="false" wsdl="{Main.endPointURL}" fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)" showBusyCursor="true"/>

示例config.xml供您参考:

 <channels>
    <channel id="endpoint"
             endpoint="http://localhost:8080/myApp/"/>
</channels>