CoolUtils TotalPDFPrinterX导致ASP C#站点崩溃
我的公司从以下公司购买了CoolUtils TotalPDFPrinterX 我从Postman向API发送了一个HTTP PUT,得到“无法得到任何响应” 在我的Windows计算机上运行时,PDF打印良好,但在服务器上,站点崩溃,在事件日志中,我收到错误“为应用程序池提供服务的进程”[my_APP_pool]”未能响应ping。进程id为“[my_process_id]” 这是我的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
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) };
}
}
}
}