Apache flex 在Flex应用程序中,我应该在哪里存储有关服务器的数据?

Apache flex 在Flex应用程序中,我应该在哪里存储有关服务器的数据?,apache-flex,Apache Flex,我是一个Flex新手,我正在开发一个Flex应用程序,它需要与AMF服务器对话,以便对用户进行身份验证 我应该将服务器URL存储在哪里?我不想在源代码中硬编码,但URL应该在编译时固定,因为当我编译应用程序时,它应该绑定到特定的服务器。如果不是AIR,你可以通过FlashVars为你的flash提供服务器URL HTML 如果您在编译时需要URL,但不想“硬编码”,那么最好将其存储在中。它们在C/C++上作为#IFDEF或#define工作,您可以轻松更改URL而无需更改应用程序(只需重新编译它

我是一个Flex新手,我正在开发一个Flex应用程序,它需要与AMF服务器对话,以便对用户进行身份验证


我应该将服务器URL存储在哪里?我不想在源代码中硬编码,但URL应该在编译时固定,因为当我编译应用程序时,它应该绑定到特定的服务器。

如果不是AIR,你可以通过FlashVars为你的flash提供服务器URL

HTML


如果您在编译时需要URL,但不想“硬编码”,那么最好将其存储在中。它们在C/C++上作为
#IFDEF
#define
工作,您可以轻松更改URL而无需更改应用程序(只需重新编译它)

您必须在编译器选项中添加类似的内容:

-define+=APP::amfServerUrl,'http://localhost/some/path/'
然后,在您的应用程序代码上:

private static const AMF_SERVER_URL:String = APP::amfServerUrl;

我使用驻留在服务器上的外部config.xml文件。我的swf/包装器位于根目录中,配置文件位于名为“config”的文件夹中。以下是我当前项目中使用此配置的代码:

我的结果函数使用SpiceLab的XMLObjectMapper、singleton和一个特殊的属性复制函数将设置从XML获取到我可以使用的全局对象(appSettingsModel)。您真正需要做的就是获取XML,将其全部解析出来,并使用结果创建一些通道。哦,这是我的XML文件:

<AppSettingsModelXML 
    serverIP = "123.123.123.123"
    serverPort = "8080"
    serverProtocol = "http"/>


这样,参数在编译时就不固定了。我需要在编译时修复它,因为它是一个身份验证服务器,通过这种方式,客户端可以通过操作JS代码轻松更改URL。哦,对不起,好吧,那么你要找的就是Bmlite的编译器常量解决方案。是的,但我认为,为每个部署编译不同的应用程序将是一件痛苦的事情。在运行时拉取设置是一种方法。
private static const AMF_SERVER_URL:String = APP::amfServerUrl;
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();
}
<AppSettingsModelXML 
    serverIP = "123.123.123.123"
    serverPort = "8080"
    serverProtocol = "http"/>