我为我们的一些服务提供了一个 SOAP 服务器 API,其中一位客户说他们不会与至少不提供 WS-I Basic Profile 合规性绑定的服务集成。
那么,问题是任何版本的 Delphi 都支持 Document/literal 或 RPC/literal 绑定吗?
编辑:看起来 RemObjects 支持 Document/literal 或 RPC/literal。
我为我们的一些服务提供了一个 SOAP 服务器 API,其中一位客户说他们不会与至少不提供 WS-I Basic Profile 合规性绑定的服务集成。
那么,问题是任何版本的 Delphi 都支持 Document/literal 或 RPC/literal 绑定吗?
编辑:看起来 RemObjects 支持 Document/literal 或 RPC/literal。
来自MSDN(2003 年 4 月):
WS-I Basic Profile 和 RPC/literal
不幸的是,WS-I Basic Profile 明确地允许使用 document/literal 和 RPC/literal。鉴于上述分析,我认为有两种消息格式是不必要的,最终无助于互操作性。希望大多数(如果不是全部)Web 服务开发人员会忽略 RPC/literal,并向 WS-I 提供必要的反馈,以便在基本概要的未来版本中解决这个问题。
所以我建议完全忽略 RPC/literal。
http://en.wikipedia.org/wiki/WS-I_Basic_Profile也指向不同版本的 WS-I Basic - 1.2(2010 年 11 月完成)和 2.0(2010 年 11 月发布)似乎是最新版本。我会检查您的通信伙伴所期望的版本级别。
解决方案
将 Web 服务从 Delphi 移至符合 WS-I 的框架,Delphi 仍然提供逻辑,但在内部通过 IPC 与新框架进行对话。
Wikipedia 文章中列出的大多数兼容框架都是开源的,具有良好的文档和庞大的安装用户群,因此它们可用于生产且稳定。
从长远来看,使用兼容的框架将减少混乱和变通方法,并且还允许支持其他 WS-I 标准而无需额外的工作。
我最近深入研究了 Delphi 代码,因为我无法使用 MS Exchange Server WDSL(这似乎是 SOAP 1.1“文档/文字包装”)。
我不是这方面的专家,但我在 Delphi XE2 单元 Soap.OPToSOAPDomConv 中遇到了这段代码,这对我来说看起来不正确:
if not IsRPC then
begin
if IsBareLiteral then
begin
[snip]
end
else
begin
// IsWrappedLiteral !
和
function TSOAPDomConvHelper.IsRPC: Boolean;
begin
Result := not (soDocument in Options);
end;
function TSOAPDomConvHelper.IsBareLiteral: Boolean;
begin
Result := Options * [soDocument, soLiteralParams] = [soDocument, soLiteralParams];
end;
function TSOAPDomConvHelper.IsWrappedLiteral: Boolean;
begin
Result := Options * [soDocument, soLiteralParams] = [soDocument];
end;
尽管您的问题是关于 WSDL 生成(而不是关于它的消耗),但以上内容向我表明“文档/文字包装”没有得到适当的支持。
简