对于我的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'可能会更好,我们也会使用它来了解他们登录的帐户。这有多可靠?我想我可以通过服务访问这个?
虽然尴尬的是我们计划在登录后访问的设置屏幕上进行配置。但要登录它就需要知道指向哪个服务器。
答案 0 :(得分:1)
如果我正确地阅读您的问题,那么您的主要目标是根据用户定义的变量动态更改服务的URL。
如果使用parsley / spicelib,这很容易实现,甚至更容易实现。
几点
不要更改超级文件中的代码,只要刷新服务,这将被覆盖。更改其生成的子类中的所有内容。
共享对象非常适合少量数据,但绝不能用于大量数据集,即存储大数据集。
无论如何,这是我如何实现这一点。
在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";
}
显然,对于我的最终解决方案,我还需要实现共享对象,但是覆盖网址是我的主要优先事项。