1

我试图在 IE8 中使用肥皂调用 WCF 服务,但我似乎无法理解 xdr 的工作原理。它们可以用于将 xml 传递给肥皂端点吗?

4

1 回答 1

2

它们可以用于将 xml 传递给肥皂端点吗?

我们基本上是在讨论具有正确格式的 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 服务。您可以在响应标头的服务器上基于该 WSDL 创建一个模拟 Web 服务Access-Control-Allow-Origin。然后,如果一切顺利,您应该会看到如下响应:

在此处输入图像描述

然后,您可以解析响应以提取您需要的数据,而不是打印原始字符串。

对于故障排除,还请查看以下帖子:XDomainRequest - Restrictions, Limitations and Workarounds

于 2012-07-01T14:03:27.230 回答