我正在使用Delphi XE2来创建webservice应用程序。但是我需要根据外部规范定义服务名称。
Delphi默认将“服务”添加到服务名称。是否有可能覆盖这个?
'service'在TWebServEx.GenerateWSDL方法中添加(Soap.WebServExp,第261行)。
答案 0 :(得分:6)
您可以使用TWSDLHTMLPublish
组件的OnAfterPublishingWSDL
事件来更改服务名称:
procedure TMyWebModule.WSDLHTMLPublishAfterPublishingWSDL(const WSDLDoc: IWSDLDocument);
begin
WSDLDoc.Definition.Attributes[SName] := 'MyServiceName';
end;
答案 1 :(得分: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库。
SService = 'service';
部分的Soap.WSDLIntf行const
中查找。 替换为:
{$IFDEF TRUNCATE_WSDL_EXTERNAL_NAME }
SService = '';
{$ELSE }
"SService = 'service';
{$ENDIF }
在您的项目中添加定义名称TRUNCATE_WSDL_EXTERNAL_NAME。
Result := system.True;