【问题标题】:Generating `docx` using Interop not working on terminating RDC使用互操作生成“docx”无法终止 RDC
【发布时间】:2019-08-02 15:35:29
【问题描述】:

我有一个 ASP.Net 框架 Web 应用程序,它试图从发票中创建一个 .docx(或 .pdf)文件。

在我的本地机器上,在开发环境中,代码可以正常工作。

但在生产服务器中我遇到了问题,将 IIS_Users 访问到“Microsoft Word 97 - 2003 Document”。

我通过实施以下问题的公认答案来解决该问题。

Accessing Office Word object model through asp.net

但是现在,当我关闭远程桌面连接并尝试从网站获取文件时,我从服务器收到错误 500,当再次远程到服务器时,我可以下载文件并且我的代码在生产服务器上运行良好。

换句话说,当 RDP 断开连接时,IIS 无法访问“Microsoft Word 97 - 2003 Document”。

我认为关闭 RDP 会导致用户注销,这就是 IIS_Users 无法访问“Microsoft Word 97 - 2003 Document”的原因。

我也用谷歌搜索了这个,但没有找到任何解决方法。有什么方法可以让用户在远程连接关闭后仍然保持登录状态?

【问题讨论】:

  • 我不确定我是否理解正确,但依赖服务帐户用户通过 RDP 登录的过程听起来存在根本缺陷。
  • @Filburt 请解释更多。
  • 不要使用 Interop 创建 Word 或 Excel。它会产生各种问题,就像您遇到的问题一样。使用专门的库。
  • @MohammadRN 我认为 Elendil 的回答很好地解释了这一点。
  • 我自己没用过,但也许github.com/xceedsoftware/DocX?

标签: asp.net windows iis permissions windows-server-2016


【解决方案1】:

使用 DocX 库,而不是互操作:

NuGet:

Install-Package DocX -Version 1.3.0 

GitHub:https://github.com/xceedsoftware/docx

【讨论】:

    【解决方案2】:

    在使用 COM 与 word 文档交互时,您实际上是在与桌面交互

    windows 2008以后windows服务不再支持与桌面交互,iis也在svcHost内部运行,参考:https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc756339(v=ws.10)

    这就是为什么您可以在 RDP 连接到服务器时使其工作,但在与 RDP 断开连接后无法运行代码

    已编辑,Lex Li 提供的link 有更详细的描述。

    【讨论】:

    猜你喜欢
    • 2014-06-20
    • 2018-04-30
    • 1970-01-01
    • 2011-02-21
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    相关资源
    最近更新 更多