2013-09-04 8 views
1

Я пытаюсь преобразовать HTML в PDF.Как создать threadafe C# exe wrapper

Я проверил PDFSharp и ITextSharp, которые не выглядят слишком сложными, но есть исполняемый файл wkhtmltopdf, который, судя по всему, имеет лучшие отзывы.

Я хотел бы использовать консольное приложение wkhtmltopdf в качестве библиотеки.

Я могу представить, что эта ситуация произошла в разных форматах, но не может найти решений, достаточно подходящих для использования.

Существует существующая библиотека обертки C# wkhtmltopdf, но у нее есть проблемы при развертывании и зависании приложения.

Существует только один вызов, который я должен пройти этот exe-файл, который что-то вроде:

wkhtmltopdf.exe "www.adsf.com" convertedPdfOfAsdf.pdf 

Я хотел бы создать библиотеку, которая закручивает нить, что:

  1. копии экземпляра wkhtmltopdf.exe в место Темпа
  2. вызовов wkhtmltopdf.exe с помощью отражения
  3. Удаляет местоположение, содержащее временные копии wkhtmltopdf.exe

Я так и не попытался ничего подобного, поэтому не уверен, что это лучший способ решить проблему, но, несомненно, есть воспроизводимое решение.

PS. Мое решение ДОЛЖНО быть потокобезопасным. Он будет работать как веб-приложение.

+0

Почему бы просто не поместить файлы в очередь и просто обработать их серийно? Ваш сайт может просто запросить, используя уникальный идентификатор, чтобы узнать, когда это будет сделано. Полагаю, это было бы более простое решение. –

+0

Хм это хорошая идея – SamuelKDavis

ответ

0

Звучит так, будто вы направились к аддону DLL. Хотя ваше предлагаемое решение обеспечит разделение между экземплярами, оно может очень быстро заставить вас в ситуации, когда вам приходится иметь дело с исключениями Unable to cast X to X.

Я бы рекомендовал заблокировать доступ к базовой библиотеке и заставить приложение ждать, или искать в нескольких приложениях, выполняющих один и тот же код, линейно.

0

Для одного сайта я использую ConcurrentQueue, который представляет собой потокобезопасную структуру данных, чтобы упростить добавление в очередь, в то время как мой потребитель выскакивает следующую вещь для обработки.

Вы можете увидеть пример в вопросе здесь:

Lock Free Concurrent Queue

Так просто загрузка вернуться обратно уникальный идентификатор в JavaScript.

Затем javascript запрашивает веб-сервер, чтобы проверить, был ли файл обработан, и до тех пор он позволит пользователю узнать статус (например, сколько записей может быть впереди).

В зависимости от того, как сайт создан, какие технологии, это может быть более простой подход.