2011-04-08 57 views
0

我已經使用FlexBuilder菜單成功生成了我的Web服務代理。這個特定的Web服務在其WSDL中指定了一個內部(或不正確的)「位置」。這意味着當我去做一個實際的方法調用時,它會失敗,因爲位置字段中指定的DNS名稱是錯誤的。 (在火蟲中顯示爲「已中止」)。如何在Flex中設置SOAP服務的位置?

如何在服務對象上設置位置屬性?我已經在Java和PHP中完成了這一點,但無法弄清楚如何在Flex中做到這一點。


更新:

需要被改變下面列出的字段。它被稱爲「WSDL端點」。所以問題是:我如何以編程方式爲生成的Web服務對象(擴展了WebServiceWrapper的對象)執行此操作?

<annotation name="ServiceConfig"> 
    <item name="DEFAULT_ENTITY_PACKAGE">valueObjects</item> 
    <item name="WSDL-endpoint">http://eoc7/eoc7/api.asmx</item> 
    <item name="LINKED_FILE"></item> 
</annotation> 
+0

顯示一些代碼,所以我們可以看到你在哪裏錯了。 – 2011-04-08 00:21:05

回答

1

這裏以編程方式設置在Flex SOAP服務的Web服務的「位置」的方式:

轉到生成的服務類,並設置該屬性的_Service控制對象:

_serviceControl.endpointURI = "http://uri-to-real-location" 

所以我創建了一個簡單的方法來從類的外部設置此:

public function setEndpointUri(uri : String) : void 
{ 
    _serviceControl.endpointURI = uri; 
} 
1

Flash Builder將web服務地址存儲在Flex項目的.model子目錄中的.fml文件中。您可以編輯此文件,然後重新打開該項目。但最簡單的方法是刪除數據/服務並使用嚮導重建它。

+0

我不應該編輯該文件中的地址,重建不會有幫助,因爲問題不在於服務的URL已更改。問題在於WSDL的URL與WSDL中的位置字段不同。例如,這是你如何在Java中使用axis:http://stackoverflow.com/questions/1243980/how-can-i-change-wsdlsoapaddress-location-at-runtime – awynne 2011-04-08 14:24:28

+0

此外,編輯該文件並重新打開項目不起作用。我需要以非常規的方式來做到這一點 – awynne 2011-04-08 14:38:48

0

這是我能得到它的工作的唯一辦法,爲您SERVIC生成的存根E:

import com.adobe.fiber.core.model_internal; 

另外:

/** 
* Override super.init() to provide any initialization customization if needed. 
*/ 
protected override function preInitializeService():void 
{   
    _needWSDLLoad = false; // to prevent loading the default WSDL 
    super.preInitializeService(); 
    // Initialization customization goes here 
    wsdl = "http://localhost/yourservice?wsdl"; 
    _needWSDLLoad = true; 
    model_internal::loadWSDLIfNecessary();