我正在使用 Delphi XE2 创建 web 服务应用程序。但是我需要根据外部规范定义服务名称。
默认情况下,Delphi 在服务名称中添加“服务”。是否可以覆盖它?
在 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"
,但导出服务名称仍将带有“服务”添加。
解决方案是重建 Delphi SOAP 库。
SService = 'service';
在部分中的 Soap.WSDLIntf 行中查找const
。将其替换为:
{$IFDEF TRUNCATE_WSDL_EXTERNAL_NAME }
SService = '';
{$ELSE }
"SService = 'service';
{$ENDIF }
将定义名称 TRUNCATE_WSDL_EXTERNAL_NAME 添加到您的项目中。
Result := system.True;