2010-03-17 3 views
0

Mate 프레임 워크 위에 Flex 어플리케이션을 개발 중입니다. 이 응용 프로그램에서는 웹 검색을 사용하여 데이터를 검색하고 있습니다.
이 웹 서비스는 고객이 설치 한 위치에 따라 고정 위치 URL이 아니기 때문에이 URL을 구성 파일에 정의합니다. Flex 애플리케이션이 시작되면 먼저이 설정 파일을 읽은 다음 찾은 값을 사용하여 웹 서비스를 초기화하고 싶습니다.
하지만 현재, 나는 이것에 대해 잘 모릅니다. 여기 Flex 및 Mate 프레임 워크를 사용하여 런타임에 webservice WSDL을 초기화하십시오.

이 부분에서 내 EventMap.mxml

<EventMap> 
<services:Services id="services" /> 

<EventHandlers type="{FlexEvent.PREINITIALIZE}">   
    <HTTPServiceInvoker instance="{services.configService}"> 
     <resultHandlers> 
      <MethodInvoker generator="{ConfigManager}" method="loadFromXml" arguments="{resultObject}" /> 
     </resultHandlers> 
     <faultHandlers> 
      <InlineInvoker method="Alert.show" arguments="ERROR: Unable to load config.xml !" /> 
     </faultHandlers>    
    </HTTPServiceInvoker> 

되면, CONFIGMANAGER 여기

webServiceWsdl

라는 바인딩 가능한 속성을 내 Services.mxml

된 설정 파일을 구문 분석하고 intitialize
<mx:Object> 
<mx:Script> 
<![CDATA[ 
    [Bindable] public var webservice:String; 
]]> 
</mx:Script> 

<mx:HTTPService id="configService" url="config.xml" useProxy="false" /> 
<mx:WebService id="dataService" wsdl="{webservice}" useProxy="false"/> 
</mx:Object> 

이 웹 서비스 전문가를 초기화하려면 어떻게해야합니까? 퍼티?

답변

0

구성 옵션을 캡슐화하고 싱글 톤 인스턴스의 속성을 서비스 정의에 바인딩하는 싱글 톤 클래스를 만듭니다. 우리는 공정한 판단을합니다.

Services.mxml에서
[Bindable] 
class Config 
{ 
    private static var instance:Config; 

    public static function getInstance():Config { 
     if (!instance) 
      instance = new Config(); 
     return instance; 
    } 

    public var WEBSERVICE:String = "default value"; 
} 

:

<mx:WebService id="dataService" wsdl="{Config.getInstance().WEBSERVICE}" useProxy="false"/> 

은 물론, 당신은 당신이 파일에서 설정을로드 할 때 설정 인스턴스를 업데이트해야합니다.

+0

죄송합니다. Preston이 말했듯이, 나는 당신과 당신의 해결책 사이에 큰 차이가 없음을 알 수 없습니다. 또한 플렉스와 싱글 톤을 사용하는 것을 매우 꺼려합니다. – GroovyB

+0

아마도 귀하의 질문에 대한 오해가있었습니다. 하지만 당신은 "어떻게 해야할지 모르겠다"고 했으므로 게시 한 코드가 작동하지 않는다고 가정했습니다. 여기에 게시 된 솔루션은 내가 여러 차례 성공적으로 사용한 솔루션입니다. 다른 장점은 구성 변수를 설명하는 정적 API를 작성하고 구성을 이벤트 맵과 분리한다는 것입니다. 그것은 내 책을 더 잘 고려한 것입니다. 싱글 톤에 대해 무엇을 얻었습니까? 건배. – lach

0

나는이 질문과 다른 점을 보지 못했습니다. 하나는 바인딩 가능한 String이고 다른 하나는 Bindable 객체입니다.

위의 예에서 웹 서비스의 wsdl 매개 변수와 연결된 바인드 가능 문자열이 변경되면 웹 서비스가 업데이트되지 않는다는 것을 발견했습니다.

문자열의 값이 게이트에서 올바르지 않으면 웹 서비스에서 wsdl을 찾지 못하는 오류가 발생하고 문자열이 값을 변경하더라도 다시 시도하지 않습니다.

프레스턴이

0

당신은이를 사용할 수 있습니다 runtimeWsdl 동적 WSDL 값을 포함하는 String 유형 변수입니다

WebService.loadWSDL(runtimeWsdl) ; 

.