Tarzlaşmış bir HTML dosyasını bir PDF'ye dönüştüren bir Web API'si oluşturmaya çalışıyorum.İlk dönüşümden sonra HangingPechkin'i Asılı
TuesPechkin kullanıyorum ve uygulamamı IIS'ye yükledim (32-bit bir uygulama olarak: uygulama havuzunu 32bit modunda çalışacak şekilde değiştirdim).
IIS 8.5, Windows Server 2012 R2 üzerinde çalışıyor. C#
PDFConversion sınıfı:
using System.Drawing.Printing;
using System.IO;
using TuesPechkin;
namespace PDFApi
{
public class PDFcreator
{
public void convert(string path, string uri)
{
IConverter converter = new StandardConverter(
new RemotingToolset<PdfToolset>(
new Win64EmbeddedDeployment(
new TempFolderDelpoyment())));
var document = new HtmlToPdfDocument
{
GlobalSettings =
{
ProduceOutline = true,
DocumentTitle = "Converted Form",
PaperSize = PaperKind.A4,
Margins =
{
All = 1.375,
Unit = Unit.Centimeters
}
},
Objects =
{
new ObjectSettings { RawData = File.ReadAllBytes(uri) }
}
};
byte[] pdfBuf = converter.Convert(document);
FileStream fs = new FileStream(path, FileMode.Create);
fs.Write(pdfBuf, 0, pdfBuf.Length);
fs.Close();
}
}
}
Kontrolör aşağıdaki gibidir: bir kere bir dosya gönderme Fiddler'da deneme PDF dönecektir hemen: bu biraz garip olur nerede
İşte[Route("converthtml")]
[HttpPost]
[MIMEContentFilter]
public async Task<HttpResponseMessage> ConvertHtml()
{
string temppath = System.IO.Path.GetTempPath();
var streamProvider = new MultipartFormDataStreamProvider(temppath);
await Request.Content.ReadAsMultipartAsync(streamProvider);
string filepath = streamProvider.FileData.Select(entry => entry.LocalFileName.Replace(temppath + "\\", "")).First<string>();
string pdfpath = System.IO.Path.GetTempFileName();
pdfpath = pdfpath.Substring(0, pdfpath.LastIndexOf('.')) + ".pdf";
new PDFcreator().convert(pdfpath, filepath);
var stream = new FileStream(pdfpath, FileMode.Open);
var result = new HttpResponseMessage(HttpStatusCode.OK);
result.Content = new StreamContent(stream);
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
return result;
}
var . Bununla birlikte, sonraki tüm POST'ler Fiddler'ın asılı kalmasını sağlayacaktır. Görev Yöneticisi incelendiğinde, bu görev için CPU ve Bellek sırasıyla% 13.5 ve ~ 96MB'ye kadar atlama gösterir.
Temp klasöründe (dosyaların depolandığı yer), başarılı bir şekilde, üç dosyada olacaktır: orijinal yüklenen dosya (GUID benzeri bir adla depolanır), wkHtmlToPdf ile oluşturulan dosya (formda "wktemp-") ve oluşturulan pdf (tempXXXX.pdf olarak). Asılı durumda, yalnızca ilk dosya bulunabilir, bu da sorunun wkHtmlToPdf'nin kendisinde olduğunu gösterir.
Ancak gerçek şikâyetçi süreç el Görev Yöneticisi öldürülünce , API başarıyla tamamlar olduğunu pdf, tamamen yaratılan döner!
IIS sıfırlanırsa, işlem özgün durumuna döner; Yeni bir girişim, sorunsuz bir şekilde çalışacaktır.
Bu bir hata mı ... Açıkçası, her görüşmeden sonra IIS sıfırlama pek yaşayabilir, ne de el işlemini her zaman öldürüyor/bu konuya herhangi çözümleri vardır?
görünüyor asılı önleyecektir . – tuespetre
Evet, bu benim sorunumu çözdü, teşekkürler! Ayrıca dönüştürücüyü işlevden çıkardım ve statik hale getirdim. –