【问题标题】:Flash Builder (Mobile) - Dynamic Web Service URLFlash Builder(移动)- 动态 Web 服务 URL
【发布时间】:2012-05-29 12:33:28
【问题描述】:

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

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

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

有没有人做过这方面的经验?

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

当我通过 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”可能会更好,我们也可以使用它来了解他们登录的帐户。这有多可靠?我想我可以通过服务访问它吗?

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

【问题讨论】:

  • 您的具体问题是什么?您所描述的内容很容易实现,但您的问题过于宽泛。
  • 我以多种方式从我的应用中创建了动态/可更改的 URL。告诉我们您的真实情况以及为什么它不起作用,也许我们可以更明确地提供帮助。
  • 对此深表歉意,我已经编辑了原始问题,其中包含更多细节和 FlashBuilder 向导生成的代码示例以及关于使用 SharedObject 是否是正确方法的一些更具体的问题我将如何更改服务的子类。

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


【解决方案1】:

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

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

几点

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

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

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

在子类中你可以改变构造函数。

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

} 

当然,这并不是您想要的,但它是一个可行的解决方案,当然您可以使用绑定到全局 ApplicationModel 或直接引用 SharedObject 我猜您已经知道如何使用 SharedObject。

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

【讨论】:

  • 我对你的回答投了赞成票,因为你肯定给我指出了正确的方向,尽管对我来说没有定义端点。所以我发布了我的最终代码作为答案。相反,我不得不使用一个名为 baseUrl 的属性,它似乎可以按预期工作。我没有把共享对象放进去,但这不会是困难的部分。我只是不知道如何以编程方式覆盖 url。我用我使用的最终代码添加了一个额外的答案。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    相关资源
    最近更新 更多