可以使用本地文件或远程文件中的服务描述将 SOAP 服务实例化。服务描述可以采用 .smd 或 .wsdl 文件格式。请参阅以下用法示例:
<div dojoType="ibm_soap.widget.SoapService" id="bnpriceService" url="./bnpriceGenerated.smd">
<div dojoType="ibm_soap.widget.SoapService" id="amazonCommerceService" url="./AWSECommerceService.wsdl">
必须以 URL 形式来提供服务描述所在的位置。在解析窗口小部件并将它实例化之后,就可以使用服务了。 通常,必须从作为 .wsdl 文件来提供服务描述的服务开始。可以使用所提供的 WsdlParser 来转换为 .smd 格式。请参阅以下示例用法:
var parser=new ibm_soap.util.WsdlParser();
parser.parse("./serviceDescription.wsdl"); var smdString = parser.smdString;
解析采用 WSDL 格式的描述时,可以使用解析器的 smdString 或 smdObject 成员来访问结果。在转换服务描述时请考虑下列各项:
parser.parse("./serviceDescription.wsdl")
// Assume that the variable wsdlStr holds the WSDL description as a string var args = new Object(); args.wsdlStr = wsdlStr parser.parse(args);
要调用由服务所描述的方法,您需要知道方法名以及该方法执行的参数的结构。例如,请参阅有关如何对 Amazon 服务调用 ItemLookUp 方法的示例。首先,应构建参数列表:
// Assume accessKeyId holds the AccessKeyId required by Amazon. var amazonServiceParms = new dojox.wire.ml.XmlElement("ItemLookUpRequest"); amazonServiceParms.setPropertyValue("AWSAccessKeyId",accessKeyId); amazonServiceParms.setPropertyValue("ItemId",isbn);
通过调用 setPropertyValue 方法来设置必需的属性。isbn 变量用于存储要搜索的 ISBN。接下来,使用窗口小部件的 service 成员来调用该服务方法,如以下示例中所示:
var deferred = amazonCommerceService.service.ItemLookup(amazonServiceParms)
调用该服务方法将返回类型为 dojo.Deferred 的对象,该对象包含所返回内容的 BODY 节点。可以使用简单的“文档对象模型”(DOM) 处理来访问结果。请参阅以下示例以了解如何从返回的数据中访问结果:
deferred.addCallback(function(results){ var title = results.getElementsByTagName("Title")[0].firstChild.nodeValue; var author = results.getElementsByTagName("Author")[0].firstChild.nodeValue; var publisher = results.getElementsByTagName("Manufacturer")[0].firstChild.nodeValue; var resultNode = dojo.byId("details"); resultNode.innerHTML = "<br><b>Title:</b>" + title + "<br><b>Author:</b>" + author + "<br><b>Publisher:</b>" + publisher; });
<app name>/ajaxProxy/www.abundanttech.com/WebServices/bnprice/bnprice.asmx.
在服务描述文件中更改服务端点 URL 之后,可能还需要执行其他配置才能使代理将请求转发至外部服务器。请参阅与您正在使用的代理一起提供的文档,以便了解更多信息。