Flash Builder(移动) - 动态Web服务URL

时间:2012-05-29 12:33:29

标签: web-services flex mobile flash-builder flex4.6

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

我希望能够做的是在应用程序中动态更改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,它似乎会自动刷新。这不会引起问题吗?

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

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

2 个答案:

答案 0 :(得分:1)

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

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

几点

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

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

  3. 无论如何,这是我如何实现这一点。

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

    以下是我如何根据配置变量更改我的网址,但您可以轻松使用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";
        }
    
    } 
    

    当然这不是你想要的,但它是一个有效的解决方案,当然你可以使用Bindings到Global ApplicationModel或直接引用SharedObject我猜你已经知道如何使用SharedObject。

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

答案 1 :(得分:0)

由于cghmauritius的解决方案对我不起作用,我发布的最终解决方案在我的情况下起作用。

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

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