首页 > 解决方案 > 在 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;

标签: xmldelphirad

解决方案


我最终做的是通过将 Omnixml 设置为默认 DOM 供应商来删除 msxml 依赖项。


推荐阅读