Delphi 10.1 Berlin编译ISAPI DLL后HTTPRIO报SOAP Content-Type错误求助
我之前帮不少开发者排查过类似的Delphi版本升级后ISAPI SOAP DLL的问题,你遇到的这个ESOAPHTTPException(提示收到text/html类型内容,而SOAP期望text/xml)其实挺典型的,大概率是Delphi 10.1 Berlin对SOAP/ISAPI的处理逻辑有了细微调整,导致响应头的Content-Type没正确设置。下面是几个常见的排查方向和解决办法:
手动强制设置响应Content-Type
Delphi XE5到10.1 Berlin之间,SOAPHTTPDisp等SOAP相关单元的默认响应头处理逻辑有改动。你可以在DLL的SOAP响应处理代码中,手动指定Content-Type为标准的SOAP格式:// 在生成SOAP响应前添加这行代码 Web.Response.ContentType := 'text/xml; charset=utf-8';同时要检查代码中有没有错误输出HTML内容(比如自定义错误页面)的逻辑,这类代码会覆盖原本的Content-Type设置。
抓包对比SOAP响应内容
用Fiddler或Wireshark抓包,对比XE5和10.1 Berlin编译的DLL返回的响应内容:重点查看响应头的Content-Type字段,以及响应体是否是标准的XML格式,有没有额外的HTML标签、空白字符或者格式错误——这些都可能让客户端误判为text/html类型。
检查SOAP序列化逻辑
Delphi 10.1的SOAP序列化器对格式的要求更严格,确认你的DLL中返回的SOAP消息是否符合SOAP 1.1/1.2标准。比如有没有未正确闭合的XML标签,或者特殊字符未转义的情况。安装Delphi 10.1的官方补丁
Delphi 10.1 Berlin存在一些SOAP相关的已知Bug,其中就包括ISAPI响应头设置异常的问题。你可以查看Embarcadero的官方补丁列表,安装对应的修复补丁后重新编译DLL。
如果以上方法都没解决问题,还可以尝试完全接管SOAP响应的构建过程,绕过Delphi的自动处理逻辑,手动生成符合标准的XML响应并设置正确的Content-Type。
内容的提问来源于stack exchange,提问作者Pieter van Wyk

