3

我为我们的一些服务提供了一个 SOAP 服务器 API,其中一位客户说他们不会与至少不提供 WS-I Basic Profile 合规性绑定的服务集成。

那么,问题是任何版本的 Delphi 都支持 Document/literal 或 RPC/literal 绑定吗?

编辑:看起来 RemObjects 支持 Document/literal 或 RPC/literal。

4

2 回答 2

0

来自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 标准而无需额外的工作。

于 2012-11-19T11:28:24.790 回答
0

我最近深入研究了 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 生成(而不是关于它的消耗),但以上内容向我表明“文档/文字包装”没有得到适当的支持。

于 2012-11-19T09:56:01.100 回答