2012-10-30 4 views
0
나는 내가 그것을 이런 식으로 일을 오전 웹 서비스와 순간에 전화를 걸 필요가

사용하지 않고 웹 서비스를 호출 :WSDL 파일

private var myWebService:WebService = new WebService(); 
myWebService.loadWSDL('path to wsdl file'); 

myWebService.addEventListener(ResultEvent.RESULT , function(event:ResultEvent):void { 
    trace(event); 
}); 
myWebService.addEventListener(FaultEvent.FAULT , function(event:FaultEvent):void { 
    trace(event); 
}); 

myWebService.soapcallName(); 

지금 내가로드하지 않고 같은 일을하지만 할 싶습니다을 WSDL 파일을 만들고 오른쪽 url에 직접 soapcall을 수행합니다. 이것이 가능한가?

답변

0

예, 우리의 WS 호출이 DMZ의 프록시에 충돌해야했지만 ACTUAL 서비스의 WSDL이 방화벽 뒤에 있고 연결할 수없는 경우이 작업을 수행해야했습니다. 그러나 그것은 까다로운 과정입니다.

먼저 비누 게시 요청을 수동으로 만들어야합니다. 위키 피 디아 http://en.wikipedia.org/wiki/SOAP의 모든 구조를 읽을 수 있습니다. 즉, wsdl을로드하지 않고 SomeService.SomeMethod를 말할 수 없으므로 모든 호출을 수동으로 생성해야합니다. 이제 당신이 직면하게 될 다음 문제는 실제로 그것을 내보내는 것입니다. POST에 사용자 정의 HTTP 헤더를 추가해야하기 때문에 전체 요청 문서 (문자열 및 줄 바꿈 등)를 작성하여 소켓을 통해 보내야합니다 (HTTPService는 POST의 사용자 정의 헤더를 지원하지 않습니다). 이 문제를 해결하는 데 도움이 더 필요하면 여기에 예제를 추가 할 수 있습니다.

예 :

당신은 기본적으로 SOAP 봉투를 생성하는 방법을 만들어야합니다. 여기

private function getStockPrice(symbol:String):String{ 
    // you can do this with xml also and call toString() on it later 
    var envelope:String = "<?xml version=\"1.0\"?>"; 
    envelope += "<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\">"; 
    envelope += "<soap:Header></soap:Header>"; 
    envelope += "<soap:Body><m:GetStockPrice xmlns:m=\"http://www.example.org/stock\">"; 
    envelope += "<m:StockName>" + symbol + "</m:StockName>"; 
    envelope += "</m:GetStockPrice></soap:Body></soap:Envelope>"; 
    return envelope; 
} 

그런 다음 당신은 당신의 전화의 POST 본체로 사용할 SOAP 봉투를 갈 준비를 반환합니다 ("IBM") getStockPrice 전화 ... 내가 준 링크에서 즉 빠른입니다. 이 예제에서 메서드 이름, param 이름 등과 같이 WSDL에 있던 정보를 미리 알아야합니다. Socket() 클래스를 사용하여 서버에 게시 본문을 보내십시오. 사용자 정의 SOAPAction 헤더를 추가하십시오. 그 부분에 대한 도움이 필요하면 여기에 해킹을 시작하는 클래스가 있습니다. 이미 HTTPService 대신 사용하십시오. RestHTTPService.

+0

가능한 경우 예제를보고 싶습니다. 나는 비누를 아주 새롭고 어떤 도움을받습니다. – vincent

+0

은 나중에 ya 편집에 예제를 추가했습니다. –