DelphiXE2を使用してWebサービスアプリケーションを作成しています。ただし、外部仕様に従ってサービス名を定義する必要があります。
Delphiは、デフォルトでサービス名に「サービス」を追加しています。これをオーバーライドすることは可能ですか?
'service'はTWebServEx.GenerateWSDLメソッドに追加されます(Soap.WebServExp、261行目)。
OnAfterPublishingWSDL
コンポーネントのイベントを使用TWSDLHTMLPublish
して、サービス名を変更できます。
procedure TMyWebModule.WSDLHTMLPublishAfterPublishingWSDL(const WSDLDoc: IWSDLDocument);
begin
WSDLDoc.Definition.Attributes[SName] := 'MyServiceName';
end;
申し訳ありませんが、プログラムインターフェイスによってライブラリの動作を変更することはできません。ユニットSoap.WSDLIntf(const SService = 'service';
)にハードコーディングされています。使用している場合
procedure TMyWebModule.WSDLHTMLPublishAfterPublishingWSDL(const WSDLDoc: IWSDLDocument);
begin
WSDLDoc.Definition.Attributes[SName] := 'MyServiceName';
end;
XMLヘッダーでタグを取得"name = MyServiceName"
しますが、エクスポートサービス名には「service」が追加されたままになります。
解決策は、DelphiSOAPライブラリを再構築することです。
SService = 'service';
ますconst
。次のように置き換えます。
{$IFDEF TRUNCATE_WSDL_EXTERNAL_NAME }
SService = '';
{$ELSE }
"SService = 'service';
{$ENDIF }
定義名TRUNCATE_WSDL_EXTERNAL_NAMEをプロジェクトに追加します。
Result := system.True;