0

对于我的 Flash Builder 4.6 项目,我定义了一个 http 服务,它查看我们网站上的一个 url。

不过,我希望能够在应用程序中动态更改 Web 服务 url。即默认使用现有的 url,但有一个管理/设置屏幕来更改 Web 服务指向的位置(存储在我们的 sqlite 数据库或本地内存中)。

这样我们就可以允许我们的客户托管他们自己版本的网站/数据库,但仍然能够通过应用商店使用/下载应用程序。

有没有人有这样做的经验?

编辑:在下面的评论之后添加更多细节。

当我通过 FlashBuilder 向导创建 HTTP 服务时,它创建了两个 Web 服务类,一个超类和一个从超类继承的子类。向导填充的所有代码都进入超类。

我可以假设我需要放入的代码将在子类中。但我不知道我会把它放在哪个功能或如何。

下面是 Super 的构造函数示例:

// initialize service control
    _serviceControl = new mx.rpc.http.HTTPMultiService("websitehere");
     var operations:Array = new Array();
     var operation:mx.rpc.http.Operation;
     var argsArray:Array;

     operation = new mx.rpc.http.Operation(null, "loginRequest");
     operation.url = "login.php";
     operation.method = "GET";
     argsArray = new Array("un","pw");
     operation.argumentNames = argsArray;         
     operation.serializationFilter = serializer0;
     operation.properties = new Object();
     operation.properties["xPath"] = "/";
     operation.contentType = "application/x-www-form-urlencoded";
     operation.resultType = valueObjects.Data;
     operations.push(operation);
_serviceControl.operationList = operations;  

我不确定需要更改 _serviceControl 变量的哪些属性。

此外,当我在我的代码中搜索我的网站时,它会在 .model 目录中返回一个 .fml 文件,如果我通过向导更改服务 url,它似乎会自动刷新。这不会引起问题吗?

然后我面临访问用户定义的 url 的挑战。在应用程序中,我们使用 sqlite 数据库来存储数据,但我认为使用“SharedObject”可能会更好,我们也可以使用它来了解他们登录的帐户。这有多可靠?我想我可以通过服务访问它吗?

虽然尴尬的是我们计划在登录后访问的设置屏幕上进行此配置。但要登录它已经需要知道指向哪个服务器。

4

2 回答 2

1

如果我正确阅读了您的问题,那么您的主要目标是根据用户定义的变量动态更改服务的 url。

如果您使用的是 parsley / spicelib,这很容易实现,甚至更容易实现。

几点

  1. 不要更改超级文件中的代码,只要服务刷新,这将被覆盖。更改其生成的子类中的所有内容。

  2. 共享对象非常适合少量数据,但绝不能用于海量数据集,即存储大数组集合。

无论如何,这就是我实现这一目标的方式。

在子类中,您可以更改构造函数。

以下是我如何根据配置变量更改我的 url,但您也可以轻松地使用 SharedObject。

public function SubClassConstructor(){
    if(CONFIG::DOMAIN_IDENT == "development" || CONFIG::DOMAIN_IDENT == "dev" || CONFIG::DOMAIN_IDENT == "d"){
        _serviceControl.endpoint = "http://yoururl1";
    }
    else if(CONFIG::DOMAIN_IDENT == "production" || CONFIG::DOMAIN_IDENT == "prod" || CONFIG::DOMAIN_IDENT == "p"){
        _serviceControl.endpoint = "http://yoururl2";
    }

} 

当然,这并不是您要寻找的,而是一个可行的解决方案,当然您可以使用绑定到全局应用程序模型或直接引用 SharedObject,我想您已经知道如何使用 SharedObject。

询问您是否需要任何进一步的帮助或指导。

于 2012-07-06T05:05:03.697 回答
0

由于 cghrmauritius 的解决方案对我不太适用,因此我发布了在我的情况下确实有效的最终解决方案。

public function subConstructor()
{
    super();
    _serviceControl.baseURL = "http://url1";
}

显然,对于我的最终解决方案,我还需要实现 shareobject,但覆盖 url 是我的主要优先事项。

于 2012-07-27T10:54:21.843 回答