xml - 在 Embarcadero RAD Server 10.3 中创建 XML 文档
问题描述
我在 RAD 服务器中有一个端点,它生成并返回一个 XML 文档。这段代码在开发环境中工作得很好。但是,当我将 bpl 复制到在 Windows 上运行 Apache 的生产服务器时,它会返回 500 错误。我发现这是导致错误的对 NewXMLDocument 的代码调用。我只是不知道为什么它可以在开发服务器上工作,但不能在生产服务器上工作,而且我不知道如何从生产服务器获取任何进一步的诊断信息。
代码如下,我删除了不影响错误的代码片段。有没有人有任何想法?
编辑:我能够进一步得到一条线,现在它在以下位置抛出 500 错误:
RootNode := resultDoc.AddChild('root');
已解决:发现问题出在服务器上的 MSXML 上。切换到 Omnixml 作为默认 DOM 供应商,一切似乎都正常。感谢大家。
procedure TQResource1.GetIMCansXML(const AContext: TEndpointContext;
const ARequest: TEndpointRequest; const AResponse: TEndpointResponse);
var
sPlace : String;
resultDoc : IXMLDOCUMENT;
RootNode : IXMLNODE;
myStream : TMemoryStream;
begin
CoInitialize(nil);
iNumRows := 0;
Try
Try
SetDBConnection(AContext.User.UserName);
myStream := TMemoryStream.Create;
sPlace := '2';
resultDoc := NewXMLDocument;
sPlace := '3';
resultDoc.Encoding := 'utf-8';
resultDoc.Options := [doNodeAutoIndent];
sPlace := '4';
RootNode := resultDoc.AddChild('root');
resultDoc.SaveToStream(myStream);
myStream.Position := 0;
Except
on e1: exception do
begin
raise Exception.Create(e1.Message + ' @ ' + sPlace);
end;
End;
Finally
AResponse.Body.SetStream(myStream, 'application/xml', True);
CoUninitialize;
End;
end;
解决方案
我最终做的是通过将 Omnixml 设置为默认 DOM 供应商来删除 msxml 依赖项。
推荐阅读
- mongodb - express + mongoose 只返回 id
- python - 从 Excel 多页文件解析:列之间的列表理解
- dialogflow-es - 代理适用于 Dialogflow,但不适用于 Actions on Google
- linkedin - 如何为我的 Linkedin UGCPost(视频)帖子获取分析数据(点击次数、展示次数等)?
- amazon-web-services - 通过 ALB 和 Lambda 集成提供二进制响应
- javascript - javascript中密码的正则表达式
- c++ - c++二叉搜索树程序程序运行但结果不显示
- javafx - CSS 错误解析(预期 LBRACE 在 [1,9] )
- kotlin - Fabric.io 上传不适用于 crashlytics 和 kotlin
- sql-server - 如何删除 SSRS 报告中的“总计”行?