1

IE8 で SOAP を使用して WCF サービスを呼び出そうとしていますが、xdr がどのように機能するのか理解できません。xml を SOAP エンドポイントに渡すために使用できますか?

4

1 に答える 1

2

xml を SOAP エンドポイントに渡すために使用できますか?

基本的には、適切にフォーマットされた XML SOAP ペイロードを使用した POST リクエストについて話しているので、XDomainRequestオブジェクトを使用して確実にそれを行うことができます。以下に基本的な例を示します。

<script type="text/javascript">
    var xdr;

    function soapTest() {
        var data =  '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">' +
                    '   <soapenv:Body>' +
                    '      <tem:Add>' +
                    '         <tem:a>1</tem:a>' +
                    '         <tem:b>2</tem:b>' +
                    '      </tem:Add>' + 
                    '   </soapenv:Body>' +
                    '</soapenv:Envelope>';

        if (window.XDomainRequest) {
            xdr = new XDomainRequest();
            if (xdr) {
                xdr.onerror = function() { alert("an error occured"); };
                xdr.ontimeout = function() { alert("timeout"); };
                xdr.onload = function() { alert(xdr.responseText); }
                xdr.timeout = 10000;
                xdr.open("post", "http://SomeServer/SoapCalculator");
                xdr.send(data);
            } else {
                alert("Failed to create XDR");
            }
        } else {
            alert("XDR doesn't exist");
        }
    }
</script>

この例のペイロードは、このコントラクトを公開する Web サービス用です。Access-Control-Allow-Originヘッダーで応答するサーバー上で、その WSDL に基づいてモック Web サービスを作成できます。次に、すべてがうまくいけば、次のような応答が表示されます。

ここに画像の説明を入力

その後、生の文字列を出力する代わりに、応答を解析して必要なデータを抽出できます。

トラブルシューティングについては、次の投稿もご覧ください: XDomainRequest - Restrictions, Limitations and Workarounds .

于 2012-07-01T14:03:27.230 に答える