You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi 10.4.2中TWSDLHTMLPublish生成WSDL属性与可选字段不生效问题

Delphi 10.4.2 SOAP WSDL生成异常解决方案

IS_ATTR标记不生效问题修复

  • 删除你自定义的所有IS_*常量定义,直接引用SOAP.Consts单元使用Delphi官方提供的常量,避免自定义常量优先级问题导致标记失效
  • 打开TWSDLHTMLPublish组件的属性面板,在Options中勾选soDocument、soLiteralParams,只有文档/字面量模式的WSDL才支持解析IS_ATTR标记生成xs:attribute节点,Delphi默认的RPC编码模式不支持该特性
  • 确认工程编译选项中「扩展RTTI」功能已开启:路径为工程选项->Delphi编译器->输出->生成扩展RTTI,设置为True,TRemotable的属性索引标记依赖扩展RTTI才能被WSDL生成器识别
  • 上述配置完成后仍不生效的,可在单元初始化段手动注册属性的序列化规则:
uses SOAP.Consts, Soap.IntfInfo, Soap.RemRegistry;

initialization
  RemClassRegistry.RegisterXSClass(ProjektFilterType, '你的服务命名空间URI');
  RemTypeRegistry.RegisterAttributeTypeInfo(TypeInfo(string), 'TestAttribut', '你的服务命名空间URI');

可选元素缺少minOccurs="0"问题修复

  • 确认TWSDLHTMLPublish组件Options中已勾选soProcessNillable、soSendDefaultInstances,开启后生成器会自动解析IS_OPTN标记和stored方法生成对应的minOccurs属性
  • Delphi 10.4.2存在枚举类型可选属性生成缺陷,需要给枚举类型添加[SoapEnum]特性修饰:
type
  [SoapEnum]
  OrderDirection    = (OrderNONE, OrderASC, OrderDESC);
  [SoapEnum]
  ProjektOrderField = (pofNONE, pofID, pofNummer, pofStatus);
  [SoapEnum]
  ProjektStatus     = (psAll, psAnfrage, psAuftrag, psAbgeschlossen);
  • 仍不生效的可手动在初始化段给属性注册可选标记:
initialization
  RemClassRegistry.RegisterPropertyOptions(ProjektFilterType, 'Status', [poOptional]);
  RemClassRegistry.RegisterPropertyOptions(ProjektFilterType, 'OrderField', [poOptional]);
  RemClassRegistry.RegisterPropertyOptions(ProjektFilterType, 'OrderDir', [poOptional]);

内容的提问来源于stack exchange,提问作者Erwin Sienknecht

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 07:06:02