私はいくつかのサービス用に SOAP サーバー API を持っていますが、クライアントの 1 人は、少なくとも WS-I Basic Profile 準拠バインディングを提供しないサービスとは統合しないと言っていました。
質問は、ドキュメント/リテラルまたは RPC/リテラル バインディングをサポートする Delphi のバージョンはどれかということです。
編集: RemObjects は Document/literal または RPC/literal をサポートしているようです。
私はいくつかのサービス用に SOAP サーバー API を持っていますが、クライアントの 1 人は、少なくとも WS-I Basic Profile 準拠バインディングを提供しないサービスとは統合しないと言っていました。
質問は、ドキュメント/リテラルまたは RPC/リテラル バインディングをサポートする Delphi のバージョンはどれかということです。
編集: RemObjects は Document/literal または RPC/literal をサポートしているようです。
私は最近、MS Exchange Server WDSL (SOAP 1.1 の "ドキュメント/リテラル ラップ" のようです) を使用できなかったため、Delphi コードに夢中になりました。
私はこれの専門家ではありませんが、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 の生成に関するものですが (消費に関するものではありません)、上記は「ドキュメント/リテラルのラップ」が適切にサポートされていないことを示唆しています。
1月
MSDNから(2003 年 4 月):
WS-I Basic Profile と RPC/literal
残念ながら、WS-I Basic Profile では、document/literal と RPC/literal の両方の使用が明示的に許可されています。上記の分析を考えると、2 つのメッセージ形式を持つことは不要であり、最終的に相互運用性には役立たないと思います。すべてではないにしてもほとんどの 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 を介して内部的に通信します。
ウィキペディアの記事にリストされている準拠フレームワークの大部分はオープン ソースであり、適切なドキュメントがあり、膨大な数のユーザー ベースがインストールされているため、すぐに運用でき、安定しています。
長い目で見れば、準拠したフレームワークを使用すると混乱や回避策が少なくなり、追加作業をほとんど行わずに他の WS-I 標準をサポートすることもできます。