是的,当我们的 WS 调用必须命中 DMZ 中的代理时,我必须这样做,但 ACTUAL 服务的 WSDL 位于防火墙后面且无法访问。但这是一个棘手的过程。
首先,您需要手动创建soap post 请求。您可以在 wikipedia http://en.wikipedia.org/wiki/SOAP上阅读有关该结构的所有信息。这意味着您将需要手动生成所有调用,因为您不能在没有加载 wsdl 的情况下说 SomeService.SomeMethod。现在,您将面临的下一个问题实际上是将其发送出去。因为您需要在 POST 上添加自定义 http 标头,所以您需要构建完整的请求文档(字符串和换行符等)并通过套接字发送(HTTPService 不支持 POST 上的自定义标头)。如果您需要更多帮助来完成这项工作,我可以在此处添加更多示例。
例子:
您基本上需要创建一个方法来生成 SOAP 信封。这是我给你的链接中的一个快速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") ,它将返回准备就绪的 SOAP 信封,您将使用该信封作为调用的 POST 正文。请注意,在示例中,您必须提前知道 WSDL 中的信息,例如方法名称、参数名称等。使用 Socket() 类将帖子正文发送到服务器,因为您需要添加自定义 SOAPAction 标头。如果你需要这部分的帮助,这里有一个类开始破解它已经做到了......使用它而不是 HTTPService。 休息HTTP服务。