2013-12-23 38 views
0

因此,我正在使用PHP服務的新項目上使用flex 4.6(在更新到4.11之前)。有一個叫MarkerService.as自動生成的類,它包含以下內容:Flex動態更改服務器

protected override function preInitializeService():void 
{ 
    super.preInitializeService(); 
super._serviceControl.endpoint = "http://www.mydomain.gr/gateway.php"; 
} 

但是我建立一個登錄系統動態變化中,用戶將連接服務器。所以我改變了上述:

public var targetServer:String="test1"; 
protected override function preInitializeService():void 
{ 
    super.preInitializeService(); 
super._serviceControl.endpoint = targetServer; 

trace(targetServer+" started"); 
} 

public function setTargetServer(s:String):void 
{ 
    targetServer=""+s; 
    super._serviceControl.endpoint = targetServer; 
    trace(s+" targeted"); 
} 

然後調用登錄方法時調用MXML類我的setter。但是,似乎prInitializeService在執行開始時被調用,因此出現連接錯誤。我附上日誌從控制檯:

test1 started <--- when app is executed 
test1 started <--- when login button is pressed and setter is called 
http://www.mydomain.gr/gateway.php targeted 
http://www.mydomain.gr/gateway.php started 
Send failed 
Channel.Connect.Failed error NetConnection.Call.Failed: HTTP: Failed: url: 'http:test1' 
app:/test1 

好像它是設置好的,舊test1的用於連接後不更新新的鏈接。有任何想法嗎?

+0

我很想知道爲什麼'test1開始'出現兩次。這個類是否有> 1個實例? – ethrbunny

+0

爲了從mxml中訪問setter,我創建了markerservice類的新對象 var m:services.markersservice.MarkersService = new services.markersservice.MarkersService; 完成後,第二個測試1開始出現 – leossmith

+0

我想知道是否在一個實例中設置'mydomain.gr'值並在另一個實例中設置'channel.connect'。 – ethrbunny

回答

0

經過幾個小時的測試和改變邏輯之後,似乎在初始化_serviceControl之前,端點的分配必須發生。我試圖用錯誤的狀態來實現我的邏輯。但是,當我將該調用移動到新視圖(loginView)上時,所有操作都像魅力一樣。從外觀上看,直接調用服務並在應用程序顯示之前執行。

結果,改變動態網關所在的服務器解決方案,如下:

Markers.as(或者無論你怎麼稱呼它),改變 從

protected override function preInitializeService():void { super.preInitializeService(); super._serviceControl.endpoint = "http://www.mydomain.com/gateway.php"; }

public var targetServer:String=""; 
protected override function preInitializeService():void 
{ 
    super.preInitializeService(); 
    super._serviceControl.endpoint = "http://www.mydomain.com/gateway.php"; 
} 

public function setTargetServer(s:String):void 
{ 
    targetServer=s; 
    super._serviceControl.endpoint = targetServer; 
    //trace(s+" targeted"); 
    preInitializeService(); 
} 

而在你login.mxml

var m:services.markersservice.MarkersService=new services.markersservice.MarkersService(); 
      m.setTargetServer("http://www.mydomain.com/gateway.php"); 
      navigator.pushView(HomeView); 

我希望這可以幫助更多的Flex開發人員。