如何使用Delphi XE2覆盖WSDL中的服务名称?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Delphi XE2覆盖WSDL中的服务名称?相关的知识,希望对你有一定的参考价值。
我正在使用Delphi XE2来创建webservice应用程序。但是我需要根据外部规范定义服务名称。
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”。
解决方案是重建Delphi SOAP库。
- 更改文件夹%DELPHI DIR% Source soap的安全设置,以允许域用户进行读/写。
- 在
SService = 'service';
部分的Soap.WSDLIntf行const
中查找。 - 替换为:
{$IFDEF TRUNCATE_WSDL_EXTERNAL_NAME } SService = ''; {$ELSE } "SService = 'service'; {$ENDIF }
- 将定义名称TRUNCATE_WSDL_EXTERNAL_NAME添加到项目中。
- 将%DELPHIDIR% Source soap中的所有文件添加到项目中。
- 重建您的应用程序。如果您收到一些错误“E2010不兼容类型:'布尔'和'截断'”,通常它可能发生在项目的dpr文件中,添加前缀“system”。布尔常量“true”或“false”,例如:
Result := system.True;
- 请享用。
以上是关于如何使用Delphi XE2覆盖WSDL中的服务名称?的主要内容,如果未能解决你的问题,请参考以下文章