CoolUtils TotalPDFPrinterX导致ASP C#站点崩溃

CoolUtils TotalPDFPrinterX导致ASP C#站点崩溃,c#,asp.net,asp.net-mvc,asp.net-web-api,pdf-generation,C#,Asp.net,Asp.net Mvc,Asp.net Web Api,Pdf Generation,我的公司从以下公司购买了CoolUtils TotalPDFPrinterX 我从Postman向API发送了一个HTTP PUT,得到“无法得到任何响应” 在我的Windows计算机上运行时,PDF打印良好,但在服务器上,站点崩溃,在事件日志中,我收到错误“为应用程序池提供服务的进程”[my_APP_pool]”未能响应ping。进程id为“[my_process_id]” 这是我的C#代码: 通过写入事件日志,我知道站点在这一行崩溃:PDFPrinterX ppx=new PDFPrin

我的公司从以下公司购买了CoolUtils TotalPDFPrinterX

我从Postman向API发送了一个HTTP PUT,得到“无法得到任何响应”

在我的Windows计算机上运行时,PDF打印良好,但在服务器上,站点崩溃,在事件日志中,我收到错误“为应用程序池提供服务的进程”[my_APP_pool]”未能响应ping。进程id为“[my_process_id]”

这是我的C#代码:

通过写入事件日志,我知道站点在这一行崩溃:
PDFPrinterX ppx=new PDFPrinterX()我还用try-catch包围了上面的代码,没有抛出异常。该网站仍在崩溃

我尝试过的事情:

  • 卸载和重新安装CoolUtils软件
  • 让每个人都能完全控制站点文件夹和CoolUtils程序文件夹
  • 使用相同的代码创建C#桌面应用程序。这在服务器上运行良好。只是ASP网站崩溃了

有人知道这可能是什么原因吗?

我越是在网上研究这件事,我就越倾向于说
ActiveX
,它是
PDFPrinterX
中的
X,在IIS中托管时似乎工作不好

我见过一些论坛,他们说在本地主机上调试时效果很好,但部署到服务器时会崩溃

…在localhost(Visual studio)中使用时工作正常

他们的一个功能页面显示它需要Win2000/NT/XP/2003/Vista/7

您应该研究服务器是否支持可以与IIS一起工作的ActiveX组件

查看他们的另一个产品支持页面::

我认为以下注释也适用于
TotalPDFPrinterX
,因为它也依赖于ActiveX

注意:安装期间请注意一些细节Total PDF Converter X:

  • 不要忘记在web服务器帐户中注册ActiveX
  • Total PDF Converter X仅支持Internet Explorer、Mozilla和Firefox浏览器
  • ActiveX仅适用于32位internet信息服务器。不支持64位服务器。改用命令行版本

我越是在网上研究这个东西,我就越倾向于说
ActiveX
,它是
PDFPrinterX
中的
X
,在IIS中托管时似乎工作不好

我见过一些论坛,他们说在本地主机上调试时效果很好,但部署到服务器时会崩溃

…在localhost(Visual studio)中使用时工作正常

他们的一个功能页面显示它需要Win2000/NT/XP/2003/Vista/7

您应该研究服务器是否支持可以与IIS一起工作的ActiveX组件

查看他们的另一个产品支持页面::

我认为以下注释也适用于
TotalPDFPrinterX
,因为它也依赖于ActiveX

注意:安装期间请注意一些细节Total PDF Converter X:

  • 不要忘记在web服务器帐户中注册ActiveX
  • Total PDF Converter X仅支持Internet Explorer、Mozilla和Firefox浏览器
  • ActiveX仅适用于32位internet信息服务器。不支持64位服务器。改用命令行版本

多亏了@Nkosi,我才找到了解决办法

ActiveX仅适用于32位internet信息服务器。不支持64位服务器。改用命令行版本

我们的IIS服务器是64位的,所以这可能是导致站点挂起的原因

但是。。。命令行仍然可以在服务器上打印PDF

客户端代码(生成HTTP POST):


多亏了@Nkosi,我才找到了解决办法

ActiveX仅适用于32位internet信息服务器。不支持64位服务器。改用命令行版本

我们的IIS服务器是64位的,所以这可能是导致站点挂起的原因

但是。。。命令行仍然可以在服务器上打印PDF

客户端代码(生成HTTP POST):


检查应用程序池。此工具的版本要求是什么。可能存在冲突,只有当您尝试
new
一个
PDFPrinterX
的实例时才会发生冲突。我建议重新检查文档。@Nkosi我应该检查应用程序池中的哪些内容?应用程序池设置为v4.0.30319,这是最新版本。不幸的是,这个产品的文档几乎不存在。这两个环境是什么。你说它在你的windows机器上运行良好。服务器的环境是什么?他们的一个节目
win2000/NT/XP/2003/Vista/7
检查应用程序池。此工具的版本要求是什么。可能存在冲突,只有当您尝试
new
一个
PDFPrinterX
的实例时才会发生冲突。我建议重新检查文档。@Nkosi我应该检查应用程序池中的哪些内容?应用程序池设置为v4.0.30319,这是最新版本。不幸的是,这个产品的文档几乎不存在。这两个环境是什么。你说它在你的windows机器上运行良好。服务器的环境是什么?他们的一个节目
win2000/NT/XP/2003/Vista/7
谢谢你的回答。我会在星期二回去工作的时候检查这个。谢谢你的回答。我星期二回去工作时会检查一下。
PDFPrinterX ppx = new PDFPrinterX();
ppx.Print(fileName, printerName, "-ap Default");
if (ppx.ErrorMessage != null)
{
    WriteToSQL(id, false, ppx.ErrorMessage, 2);
    Console.WriteLine(ppx.ErrorMessage);
}
private void SendToPrinter(string fileName, string printerName, int id, decimal documentSequence)
{
    // use http client to make a POST to the print api
    using (var client = new HttpClient())
    {
        // compile the values string to transfer in POST
        // should finish to look something like this:
        // C:\print.pdf&PRTFTW_OFIT&ValShip-155320-1
        var values = new Dictionary<string, string>
        {
            { "", fileName + "&" + printerName + "&ValShip-" + id + "-" + documentSequence},
        };

        // URL encode the values string
        var content = new FormUrlEncodedContent(values);

        // make the POST

        // DEBUG
        var response = client.PostAsync("http://localhost:54339/api/print", content);

        // retrieve the response
        var responseString = response.Result.ToString();
    }

}
using System;
using System.Net.Http;
using System.Web;
using System.Web.Http;

namespace api.valbruna.print.Controllers
{
    public class PrintController : ApiController
    {
        // POST api/print
        public HttpResponseMessage Post(HttpRequestMessage request)
        {
            try
            {
                // parse the content recieved from the client
                var content = request.Content.ReadAsStringAsync().Result;

                // decode the content, certain characters such as 
                // '&' get encoded to URL lingo such as '%26'
                content = HttpUtility.UrlDecode(content);

                // split the string into 3 seperate parts
                String[] str = content.Split('&');

                // remove the equal sign from the first string
                str[0] = str[0].Trim('=');

                // compile the arguments command line string
                // should finish to look something like this:
                // "C:\Program Files (x86)\CoolUtils\Total PDF PrinterX\PDFPrinterX.exe" "C:\print.pdf" -p"\\PRINTERS\PRTFTW_OFIT" -ap Default -log "C:\inetpub\logs\CoolUtils\log-ValShip-155320-4.txt" -verbosity detail"
                String arguments = "\"" + str[0] + "\" -p\"\\\\PRINTERS\\" + str[1] +
                                   "\" -ap Default -log \"C:\\inetpub\\logs\\CoolUtils\\log-" + str[2] +
                                   ".txt\" -verbosity detail";

                // file location for PDFPrinterX.exe
                String file = @"C:\Program Files (x86)\CoolUtils\Total PDF PrinterX\PDFPrinterX.exe";

                // start the process
                System.Diagnostics.Process process = new System.Diagnostics.Process();
                System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
                startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
                startInfo.FileName = file;
                startInfo.Arguments = arguments;
                process.StartInfo = startInfo;
                process.Start();

                return new HttpResponseMessage() { Content = new StringContent(content) };
            }
            catch (Exception e)
            {
                return new HttpResponseMessage() { Content = new StringContent(e.Message) };
            }
        }
    }
}