如何使用 HTML 发送 SOAP 请求并接收响应?
How can I send a SOAP request and receive a response using HTML?
我想发送一个号码到SOAP "server"(我不知道我是否可以称它为服务器,请纠正我错误)并使用 HTML 收到回复,我看到许多问题的答案包含发送 XML 请求的示例,如下所示,但我没有关于如何在 HTML 上接收和查看回复的想法,抱歉,我是 SOAP.
的新手
P.S.: 当然,HTML 我的意思是 JavaScript 在 HTML :P
服务器:Here
提前致谢!
<html>
<head>
<title>SOAP JavaScript Client Test</title>
<script type="text/javascript">
function soap() {
var xmlhttp = new XMLHttpRequest();
xmlhttp.open('POST', 'http://192.168.0.251:9080/wsa/wsa1', true);
// build SOAP request
var sr =
'<?xml version="1.0" encoding="utf-8"?>' +
'<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:services-progress-com:notavailable">' +
'<soapenv:Header/>' +
'<soapenv:Body>' +
'<urn:lnestagio>' +
'<urn:vvalor>5</urn:vvalor>' +
'</urn:lnestagio>' +
'</soapenv:Body>' +
'</soapenv:Envelope>';
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200) {
alert('done use firebug to see response');
}
}
}
// Send the POST request
xmlhttp.setRequestHeader('Content-Type', 'text/xml');
xmlhttp.send(sr);
// send request
// ...
}
</script>
</head>
<body>
<form name="Demo" action="" method="post">
<div>
<input type="button" value="Soap" onclick="soap();" />
</div>
</form>
</body>
<html>
来自我的服务器的 SOAP XML
<wsdl:definitions xmlns:tns="urn:services-progress-com:ys:server" xmlns:S2="urn:services-progress-com:sys:server:Estagio" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prodata="urn:schemas-progress-com:xml-prodata:0001" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:S1="urn:soap-fault:details" xmlns="http://schemas.xmlsoap.org/wsdl/" name="Estagio" targetNamespace="urn:services-progress-com:sys:server">
<wsdl:documentation>
Author=sys, EncodingType=DOC_LITERAL, WSA_Product=10.2B07 - N/A
</wsdl:documentation>
<wsdl:types>
<schema xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified" targetNamespace="urn:soap-fault:details">
<element name="FaultDetail">
<complexType>
<sequence>
<element name="errorMessage" type="xsd:string"/>
<element name="requestID" type="xsd:string"/>
</sequence>
</complexType>
</element>
</schema>
<schema xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="urn:services-progress-com:sys:server:Estagio">
<element name="lnestagio">
<complexType>
<sequence>
<element name="vvalor" nillable="true" type="xsd:decimal"/> <!-- Here I think he gets the number I sent -->
</sequence>
</complexType>
</element>
<element name="lnestagioResponse">
<complexType>
<sequence>
<element name="result" nillable="true" type="xsd:string"/>
<element name="vcalc" nillable="true" type="xsd:decimal"/> <!-- And it returns the number multiplied by 2 -->
</sequence>
</complexType>
</element>
</schema>
</wsdl:types>
<wsdl:message name="FaultDetailMessage">
<wsdl:part name="FaultDetail" element="S1:FaultDetail"/>
</wsdl:message>
<wsdl:message name="Estagio_lnestagio">
<wsdl:part name="parameters" element="S2:lnestagio"/>
</wsdl:message>
<wsdl:message name="Estagio_lnestagioResponse">
<wsdl:part name="parameters" element="S2:lnestagioResponse"/>
</wsdl:message>
<wsdl:portType name="EstagioObj">
<wsdl:operation name="lnestagio">
<wsdl:input message="tns:Estagio_lnestagio"/>
<wsdl:output message="tns:Estagio_lnestagioResponse"/>
<wsdl:fault name="EstagioFault" message="tns:FaultDetailMessage"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="EstagioObj" type="tns:EstagioObj">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="lnestagio">
<soap:operation soapAction="" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="EstagioFault">
<soap:fault name="EstagioFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="EstagioService">
<wsdl:port name="EstagioObj" binding="tns:EstagioObj">
<wsdl:documentation/>
<soap:address location="http://localhost:9080/wsa/wsa1"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
好吧,SOAP 服务器旨在接收 SOAP 请求和发送 SOAP 响应。
因为 SOAP 基本上是 XML,而不是期望来自服务器的 HTML 响应,更合适的是寻找一种方法来解析 SOAP 的 XML响应并在 HTML.
中显示
但是当我输入这个答案时,我认为您可能误解了 SOAP 服务器的目标。在我看来,您想直接向客户端浏览器显示原始 SOAP 响应。但是 SOAP 服务器并不打算以这种方式工作。
通常,一个 SOAP 服务器由另一个服务器使用,方法是向它发出 SOAP 请求,然后解析 SOAP 响应。而这个 "other server" 可能是一个 HTTP 服务器。
举个例子。我想知道明天我所在城市的天气预报。我转到 dummyweatherforecast.com 并在搜索字段中输入我所在城市的名称。但是 dummyweatherforecast.com 本身并没有存储所有的天气预报。它可能会使用包含我的城市名称的 SOAP 请求来联系 SOAP 服务器(专门设计用于提供天气预报)。 SOAP 服务器 returns 一个带有不同天气信息(sunny/cloudy、温度等)的 SOAP 响应,然后 dummyweatherforecast.com 处理这个 SOAP 响应(即,作为提醒,XML) 用美丽的句子向客户展示它,例如 "It will be sunny tomorrow, with 86°F. Take your swimsuit !" 装饰着美丽的太阳图像。
如您所见,客户端甚至不知道 dummyweatherforecast.com 和 SOAP 服务器之间进行了 SOAP 通信。这就是 SOAP 的使用方式:由服务器本身使用,很少直接由客户端使用。这就是我们所说的 "web services",尽管这个术语指的是一组更通用的技术,用于让计算机相互通信。
我希望这能让你的头脑开朗一点。
PS :顺便说一下,您为服务器提供的 link 指向一个不公开的 IP(192.168 地址用于专用网络)。
我想发送一个号码到SOAP "server"(我不知道我是否可以称它为服务器,请纠正我错误)并使用 HTML 收到回复,我看到许多问题的答案包含发送 XML 请求的示例,如下所示,但我没有关于如何在 HTML 上接收和查看回复的想法,抱歉,我是 SOAP.
的新手P.S.: 当然,HTML 我的意思是 JavaScript 在 HTML :P
服务器:Here
提前致谢!
<html>
<head>
<title>SOAP JavaScript Client Test</title>
<script type="text/javascript">
function soap() {
var xmlhttp = new XMLHttpRequest();
xmlhttp.open('POST', 'http://192.168.0.251:9080/wsa/wsa1', true);
// build SOAP request
var sr =
'<?xml version="1.0" encoding="utf-8"?>' +
'<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:services-progress-com:notavailable">' +
'<soapenv:Header/>' +
'<soapenv:Body>' +
'<urn:lnestagio>' +
'<urn:vvalor>5</urn:vvalor>' +
'</urn:lnestagio>' +
'</soapenv:Body>' +
'</soapenv:Envelope>';
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200) {
alert('done use firebug to see response');
}
}
}
// Send the POST request
xmlhttp.setRequestHeader('Content-Type', 'text/xml');
xmlhttp.send(sr);
// send request
// ...
}
</script>
</head>
<body>
<form name="Demo" action="" method="post">
<div>
<input type="button" value="Soap" onclick="soap();" />
</div>
</form>
</body>
<html>
来自我的服务器的 SOAP XML
<wsdl:definitions xmlns:tns="urn:services-progress-com:ys:server" xmlns:S2="urn:services-progress-com:sys:server:Estagio" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prodata="urn:schemas-progress-com:xml-prodata:0001" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:S1="urn:soap-fault:details" xmlns="http://schemas.xmlsoap.org/wsdl/" name="Estagio" targetNamespace="urn:services-progress-com:sys:server">
<wsdl:documentation>
Author=sys, EncodingType=DOC_LITERAL, WSA_Product=10.2B07 - N/A
</wsdl:documentation>
<wsdl:types>
<schema xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified" targetNamespace="urn:soap-fault:details">
<element name="FaultDetail">
<complexType>
<sequence>
<element name="errorMessage" type="xsd:string"/>
<element name="requestID" type="xsd:string"/>
</sequence>
</complexType>
</element>
</schema>
<schema xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="urn:services-progress-com:sys:server:Estagio">
<element name="lnestagio">
<complexType>
<sequence>
<element name="vvalor" nillable="true" type="xsd:decimal"/> <!-- Here I think he gets the number I sent -->
</sequence>
</complexType>
</element>
<element name="lnestagioResponse">
<complexType>
<sequence>
<element name="result" nillable="true" type="xsd:string"/>
<element name="vcalc" nillable="true" type="xsd:decimal"/> <!-- And it returns the number multiplied by 2 -->
</sequence>
</complexType>
</element>
</schema>
</wsdl:types>
<wsdl:message name="FaultDetailMessage">
<wsdl:part name="FaultDetail" element="S1:FaultDetail"/>
</wsdl:message>
<wsdl:message name="Estagio_lnestagio">
<wsdl:part name="parameters" element="S2:lnestagio"/>
</wsdl:message>
<wsdl:message name="Estagio_lnestagioResponse">
<wsdl:part name="parameters" element="S2:lnestagioResponse"/>
</wsdl:message>
<wsdl:portType name="EstagioObj">
<wsdl:operation name="lnestagio">
<wsdl:input message="tns:Estagio_lnestagio"/>
<wsdl:output message="tns:Estagio_lnestagioResponse"/>
<wsdl:fault name="EstagioFault" message="tns:FaultDetailMessage"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="EstagioObj" type="tns:EstagioObj">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="lnestagio">
<soap:operation soapAction="" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="EstagioFault">
<soap:fault name="EstagioFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="EstagioService">
<wsdl:port name="EstagioObj" binding="tns:EstagioObj">
<wsdl:documentation/>
<soap:address location="http://localhost:9080/wsa/wsa1"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
好吧,SOAP 服务器旨在接收 SOAP 请求和发送 SOAP 响应。
因为 SOAP 基本上是 XML,而不是期望来自服务器的 HTML 响应,更合适的是寻找一种方法来解析 SOAP 的 XML响应并在 HTML.
中显示但是当我输入这个答案时,我认为您可能误解了 SOAP 服务器的目标。在我看来,您想直接向客户端浏览器显示原始 SOAP 响应。但是 SOAP 服务器并不打算以这种方式工作。
通常,一个 SOAP 服务器由另一个服务器使用,方法是向它发出 SOAP 请求,然后解析 SOAP 响应。而这个 "other server" 可能是一个 HTTP 服务器。
举个例子。我想知道明天我所在城市的天气预报。我转到 dummyweatherforecast.com 并在搜索字段中输入我所在城市的名称。但是 dummyweatherforecast.com 本身并没有存储所有的天气预报。它可能会使用包含我的城市名称的 SOAP 请求来联系 SOAP 服务器(专门设计用于提供天气预报)。 SOAP 服务器 returns 一个带有不同天气信息(sunny/cloudy、温度等)的 SOAP 响应,然后 dummyweatherforecast.com 处理这个 SOAP 响应(即,作为提醒,XML) 用美丽的句子向客户展示它,例如 "It will be sunny tomorrow, with 86°F. Take your swimsuit !" 装饰着美丽的太阳图像。
如您所见,客户端甚至不知道 dummyweatherforecast.com 和 SOAP 服务器之间进行了 SOAP 通信。这就是 SOAP 的使用方式:由服务器本身使用,很少直接由客户端使用。这就是我们所说的 "web services",尽管这个术语指的是一组更通用的技术,用于让计算机相互通信。
我希望这能让你的头脑开朗一点。
PS :顺便说一下,您为服务器提供的 link 指向一个不公开的 IP(192.168 地址用于专用网络)。