Странная блокировка Ghostscript на dll (Произошла ошибка при вызове gsapi_new_instance: -100)
У меня есть веб-сайт на C#/MVC для загрузки файлов PDF и когда несколько экземпляров браузера пытаются загрузить их одновременно, используя Ghostscript.Net v 1.2.1
Я получаю следующую ошибку:
Ghostscript.NET.GhostscriptAPICallException: Произошла ошибка при обращении к "gsapi_new_instance": в Ghostscript. (Потоковый поток, GhostscriptVersionInfo versionInfo, Boolean dllFromMemory)`
Это ломается здесь:
private Ghostscript.NET.GhostscriptVersionInfo _version = Ghostscript.NET.GhostscriptVersionInfo.GetLastInstalledVersion(Ghostscript.NET.GhostscriptLicense.GPL | Ghostscript.NET.GhostscriptLicense.AFPL, Ghostscript.NET.GhostscriptLicense.GPL);
using (var raster = new GhostscriptRasterizer())
{
raster.Open(fileStream, _version, false);
}
на открытом. Этот код вызывается из функции, вызываемой async
Task<ActionResult>
, Интересно, если async
как-то ломает это. На GhostScript
сайт, самый близкий связанный ответ, который я мог найти, должен удостовериться, что я Close()/Dispose()
предыдущие экземпляры - однако это не моя проблема, поскольку проблема заключается в сопутствующих экземплярах в разных сеансах браузера, вызывающих один и тот же.dll (который имеет разрешения "Все" в IIS).
Нет никаких статических переменных в отношении чего-либо из этого, и это происходит от исходного HttpPost
,
1 ответ
Согласно https://github.com/jhabjan/Ghostscript.NET/issues/10, вам, вероятно, нужно изменить:
raster.Open(fileStream, _version, false);
чтобы:
raster.Open(fileStream, _version, true);