如何使用Delphi XE2覆盖WSDL中的服务名称?

问题描述 投票:4回答:2

我正在使用Delphi XE2来创建webservice应用程序。但是我需要根据外部规范定义服务名称。

Delphi默认将“服务”添加到服务名称。有可能覆盖这个吗?

'service'在TWebServEx.GenerateWSDL方法中添加(Soap.WebServExp,第261行)。

delphi soap wsdl
2个回答
6
投票

您可以使用OnAfterPublishingWSDL组件的TWSDLHTMLPublish事件来更改服务名称:

procedure TMyWebModule.WSDLHTMLPublishAfterPublishingWSDL(const WSDLDoc: IWSDLDocument);
begin
  WSDLDoc.Definition.Attributes[SName] := 'MyServiceName';
end;

0
投票

很抱歉,你不能通过程序界面改变库的行为。它是在单元Soap.WSDLIntf(const SService = 'service';)中硬编码的。如果你正在使用

    procedure TMyWebModule.WSDLHTMLPublishAfterPublishingWSDL(const WSDLDoc: IWSDLDocument);
    begin
       WSDLDoc.Definition.Attributes[SName] := 'MyServiceName';
    end;

您在XML标头中获取标签"name = MyServiceName",但导出服务名称仍将添加“service”。

解决方案是重建Delphi SOAP库。

  1. 更改文件夹%DELPHI DIR%\ Source \ soap的安全设置,以允许域用户进行读/写。
  2. SService = 'service';部分的Soap.WSDLIntf行const中查找。
  3. 替换为: {$IFDEF TRUNCATE_WSDL_EXTERNAL_NAME } SService = ''; {$ELSE } "SService = 'service'; {$ENDIF }
  4. 将定义名称TRUNCATE_WSDL_EXTERNAL_NAME添加到项目中。
  5. 将%DELPHIDIR%\ Source \ soap中的所有文件添加到项目中。
  6. 重建您的应用程序。如果您收到一些错误“E2010不兼容类型:'布尔'和'截断'”,通常它可能发生在项目的dpr文件中,添加前缀“system”。布尔常量“true”或“false”,例如:Result := system.True;
  7. 请享用。
© www.soinside.com 2019 - 2024. All rights reserved.