我正在使用部署在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进行硬编码?
祝你好运, 纳库尔
答案 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>