我是Flex新手,我正在开发一个Flex应用程序,需要与AMF服务器通信才能对用户进行身份验证。
我应该在哪里存储服务器网址?我不想在源代码中对其进行硬编码,但是URL应该在编译时修复,因为当我编译应用程序时,它应该绑定到特定的服务器。
答案 0 :(得分:6)
如果您在编译时需要URL,但又不想对其进行“硬编码”,那么最好的办法是将其存储在inline constants中。它们在C / C ++上作为#IFDEF
或#define
工作,您可以轻松更改URL而无需更改应用程序(只需重新编译它)。
您必须在编译器选项中添加类似的内容:
-define+=APP::amfServerUrl,'http://localhost/some/path/'
然后,在您的应用代码上:
private static const AMF_SERVER_URL:String = APP::amfServerUrl;
答案 1 :(得分:0)
如果不是AIR,您可以通过FlashVars为您的Flash提供服务器URL
HTML
<script type="text/javascript">
var flashvars = {gateway:'http://myserver/amfphp'
};
var params = {
menu: "false",
scale: "showAll",
allowFullscreen: "true",
allowScriptAccess: "always",
quality:"best",
bgcolor: "#FFFFFF"
};
var attributes = {
id:"main", name:"main"
};
swfobject.embedSWF("main.swf", "altContent", "100%", "100%", "10.0.0", "expressInstall.swf", flashvars, params, attributes);
</script>
然后要检索此参数,请使用:
AS3
var gatewayUrl:String = stage.loaderInfo.parameters["gateway"];
答案 2 :(得分:0)
我使用驻留在服务器上的外部config.xml文件。我的swf /包装器位于root中,配置位于名为“config”的文件夹中。以下是我当前项目中使用此配置的代码:
override protected function doStart() : void {
var xmlLoader : URLLoader = new URLLoader();
xmlLoader.addEventListener(Event.COMPLETE, result, false, EventPriority.DEFAULT_HANDLER, true);
xmlLoader.addEventListener(IOErrorEvent.IO_ERROR, fault, false, EventPriority.DEFAULT_HANDLER, true);
xmlLoader.load(new URLRequest("config/config.xml"));
}
public function fault(info : *) : void {
error("Failed to load config file.");
trace("Error Loading Configuration");
}
public function result(data : Event) : void {
var xml : XML = new XML(data.target.data);
var settings : Object = XMLMapperUtil.mapAppSettingsModelFromXML(xml);
var appSettingsModel : AppSettingsModel = AppSettingsModel.getInstance();
ExObjectUtil.copyObjectProperties(appSettingsModel, settings);
var secureString : String = (appSettingsModel.serverProtocol == 'https') ? "secure" : "";
var firstURLSegment : String =
appSettingsModel.serverProtocol
+ "://"
+ appSettingsModel.serverIP
+ ":"
+ appSettingsModel.serverPort
+ "/FlexClient/messagebroker/";
var remotingURL : String = firstURLSegment + "amf" + secureString;
var messagingURL : String = firstURLSegment + secureString + "streamingamf";
var remotingChannelSet : ChannelSet = new ChannelSet();
var messagingChannelSet : ChannelSet = new ChannelSet();
if (appSettingsModel.serverProtocol == 'https') {
remotingChannelSet.addChannel(new SecureAMFChannel("my-secure-amf", remotingURL));
messagingChannelSet.addChannel(new SecureStreamingAMFChannel("my-secure-amf-stream", messagingURL));
}
else {
remotingChannelSet.addChannel(new AMFChannel("my-amf", remotingURL));
messagingChannelSet.addChannel(new StreamingAMFChannel("my-streaming-amf", messagingURL));
}
appSettingsModel.remoteObject_ChannelSet = remotingChannelSet;
appSettingsModel.messaging_ChannelSet = messagingChannelSet;
complete();
}
我的结果函数使用SpiceLab的XMLObjectMapper,一个单例和一个特殊属性复制函数,将XML中的设置转换为我可以使用的全局对象(appSettingsModel)。您真正需要做的就是获取XML,解析所有内容,并使用结果创建一些通道。哦,这是我的XML文件:
<AppSettingsModelXML
serverIP = "123.123.123.123"
serverPort = "8080"
serverProtocol = "http"/>