0

Webサービスに電話をかける必要がありますが、現時点では次のようにしています。

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を実行しません。これは可能ですか?

4

1 に答える 1

0

はい、WS 呼び出しが DMZ 内のプロキシにヒットする必要があったときにこれを行う必要がありましたが、ACTUAL サービスの WSDL はファイアウォールの背後にあり、到達できませんでした。しかし、それはトリッキーなプロセスです。

まず、ソープ ポスト リクエストを手動で作成する必要があります。ウィキペディアhttp://en.wikipedia.org/wiki/SOAPで構造についてすべて読むことができます。これは、wsdl がロードされていないと SomeService.SomeMethod を言うことができないため、すべての呼び出しを手動で生成する必要があることを意味します。次に直面する問題は、実際に送信することです。POST にカスタム http ヘッダーを追加する必要があるため、完全なリクエスト ドキュメント (文字列や改行など) を作成し、ソケット経由で送信する必要があります (HTTPService は POST のカスタム ヘッダーをサポートしません)。これを進める上でさらに支援が必要な場合は、ここにさらに例を追加できます。

例:

基本的に、SOAP Envelopes を生成するメソッドを作成する必要があります。ここに私があなたに与えたリンクからの簡単なieがあります...

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;
}

次に getStockPrice("IBM") を呼び出します。これは、呼び出しの POST 本文として使用する準備が整った SOAP エンベロープを返します。この例では、メソッド名、パラメーター名など、事前に WSDL に含まれていたはずの情報を知っておく必要があることに注意してください。Socket() クラスを使用して、サーバーに投稿本文を送信する必要があるためです。カスタム SOAPAction ヘッダーを追加します。その部分で助けが必要な場合は、ハッキングを開始するためのクラスが既にあります... HTTPServiceの代わりに使用してください。 RestHTTPService

于 2012-10-31T01:41:03.093 に答える