C # Web API не может найти перенаправленный принтер - PullRequest
0 голосов
/ 05 июля 2018

Я занимаюсь разработкой веб-API, который развернут в IIS 8 на Windows Server 2012 R2. Для этого необходимо, чтобы документы печатались с сервера на сетевой принтер.

Я занимаюсь разработкой сеанса RDP с перенаправленным принтером, этот принтер также установлен в качестве принтера по умолчанию.

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

Пустая консоль использует следующий код для поиска принтеров

var ps = new PrinterSettings();
foreach(var p in PrinterSettings.InstalledPrinters)
{
  var name = p as string;
  Console.WriteLine(name);
}

При запуске в качестве консольного приложения он выбирает перенаправленный принтер по умолчанию и работает.

Я переместил этот код в веб-API и сделал следующее

  • настроить пул приложений сайта для запуска под моей учетной записью (для тестирования)
  • Установлен Интернет Роль печати
  • Установлена ​​функция интернет-печати

После этого принтера по умолчанию больше нет в списке установленных принтеров, и по умолчанию он недоступен.

Какие дополнительные разрешения / изменения мне нужно сделать, чтобы размещенный на IIS сайт мог видеть перенаправленный принтер?

Ответы [ 2 ]

0 голосов
/ 07 июля 2018

Просто идея: Вы проверяли «Загрузить профиль пользователя»? Смотри

Исключения безопасности в ASP.NET и опция загрузки профиля пользователя в IIS 7.5

и

https://blogs.msdn.microsoft.com/vijaysk/2009/03/08/iis-7-tip-3-you-can-now-load-the-user-profile-of-the-application-pool-identity/

Я не эксперт по IIS, но много лет назад у меня были проблемы с запланированными задачами, не загружающими профиль пользователя.

0 голосов
/ 06 июля 2018

Учетная запись, под которой работает IIS, должна иметь доступ к очереди печати, которую вы хотите использовать. По умолчанию это не так. Тот, кто обслуживает сервер, должен предоставить учетной записи необходимые разрешения.

Обратите внимание, что это не будет "перенаправленный принтер" из вашего сеанса RDP. Принтер должен быть настроен на сервере IIS, и учетная запись IIS работает так, как ему требуется доступ к нему.

Сеанс RDP изолирован. Я не верю, что есть способ (по крайней мере, не чистый, документированный стабильный способ) предоставить процессу сервера доступ к ресурсу в сеансе RDP, однако вы, безусловно, можете предоставить ему собственный доступ, используя обычный процесс настройки принтера.

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

...