我应该在Flex应用程序中将有关服务器的数据存储在何处?

时间:2011-03-28 13:37:56

标签: flex

我是Flex新手,我正在开发一个Flex应用程序,需要与AMF服务器通信才能对用户进行身份验证。

我应该在哪里存储服务器网址?我不想在源代码中对其进行硬编码,但是URL应该在编译时修复,因为当我编译应用程序时,它应该绑定到特定的服务器。

3 个答案:

答案 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"/>