1

WkHtmlToXSharp 是优秀的 Html 到 PDF 转换库 wkhtmltopdf 库的 C# 包装器(使用 P/Invoke)。https://github.com/TobiTonner/WkHtmlToXSharp

我在登台 Windows Server 2008 R2 x64 环境中有两个网站,其中一个可以说是网站A版本的网站,另一个是网站B。

WkHtmlToXSharp 转换在A版本上工作,但是当我设置B版本时,转换在该版本上不起作用,我收到一个错误:

HtmlToPdf conversion failed: Failed loading page http://website/Convert (sometimes it will work just to ignore this error with --load-error-handling ignore)

我想知道为什么会这样,然后我指向A网站查看与B站点正在查找的文件夹相同的文件夹。令我惊讶的是,当我在那里运行A转换时运行良好,但是当我破坏B时,我仍然遇到相同的错误,但有趣的是两个站点都指向相同的源代码(文件夹)。我只是想知道为什么会这样。两个网站都有相似的应用程序池配置,并且在其中的机器人中启用 32 位应用程序设置得太真了。此外,我试图为两个网站设置相同的应用程序池,但仍然发生相同的事情,站点A上的转换正在工作,但B站点上的转换没有。

在我的本地环境(Windows 7 x64)上,如果我设置相同的网站转换在两种情况下都有效。

此外,我对代码进行了一些更改以忽略错误: converter.ObjectSettings.Load.LoadErrorHandling = LoadErrorHandlingType.ignore; 但它不能修复错误,唯一的区别是现在我得到空的 pdf,以防在B网站上进行转换。

我只是想可能是 Windows Server 中的某些东西拒绝在内存中运行/保留 WkHtmlToXSharp.dll 或 wkhtmltopdf 的两个副本或类似的东西。

也许有人对此有任何想法?

4

1 回答 1

0

看到这个https://github.com/pruiz/WkHtmlToXSharp/issues/8

IIS 的问题在于它会回收应用程序。不时池,但在此过程中,您的应用程序持有的任何非托管资源可能(如在本例中)最终不会被适当地释放。此外,在您的 IIS 应用程序下拥有多个 AppDomain 可能会导致内存损坏,因为两个 AppDomain 都尝试在同一进程(即相同的进程内存/空间)下实例化 WebKit 实例,这是另一种不可能。

您可以做的最好的事情是让守护程序或服务处理 HTML2PDF 转换,并从您的 Web 应用程序调用它。使用远程处理、WS 调用或任何其他 RPC 方法。这也将帮助您分解您的应用程序并使事情更容易调试。

希望能帮助到你。

于 2013-08-31T11:50:19.467 回答