从 WCF Web 服务进行服务器端打印

Server side printing from WCF web service

我被困了一个多星期,试图在共享网络打印机上从 WCF Web 服务进行打印。我在网上没有找到任何解决方案。

因此,有一个 VM Windows 2016 Web 服务器,其中 IIS 10 托管 WCF Web 服务。该 Web 服务应该能够在连接到网络中其他计算机的共享网络打印机上打印文档。该共享网络打印机安装在 Web 服务器上,可以从任何桌面应用程序打印。但是当我调用网络服务方法打印东西时,它不会打印。

我尝试了在网上找到的所有内容。 我尝试为 IIS 应用程序池使用不同的帐户。当我使用任何内置帐户(LocalService、LocalSystem、NetworkService、ApplicationPoolIdentity)时,代码中未列出任何打印机。当我使用本地管理员帐户时,该服务显示已安装的打印机,但出现错误:访问打印机的设置无效。顺便说一句,我正在使用此帐户登录到服务器,并且可以使用同一台打印机正常打印(例如测试页或从记事本)。

我还尝试了 Microsoft 的注册表 hack:http://support.microsoft.com/kb/184291/en-us

我试图冒充不同的用户,也试图避免被冒充。

我还创建了一个用于打印的小型桌面应用程序,当我从命令提示符启动它时,打印效果很好。但是当我从服务启动相同的进程时,再次出现前面提到的问题。

我什至在不同的环境(不同的计算机,但相同的配置)中尝试了一切,并且服务表现相同。

我不会post web service C# 代码在这里,因为我确定代码不是问题。相同的代码在我的开发机器上以及在 Web 服务器上的桌面应用程序中使用时也能很好地打印。问题出在网络服务正在使用的帐户的权限中。

当然,所有用户都有权打印和管理打印机。

是否可以从 Web 服务打印?也许我正在尝试做一些不推荐或不可能的事情?

我只是想结束这个问题并给出解决问题的方法。

经过数周的尝试使这项工作成功后,我放弃了让 Web 服务调用本地打印机的尝试。请不要去那里。

系统的初始架构是桌面应用程序为许多不同的功能调用 Web 服务,其中包括打印文档。但我不得不改变它并开发一个用于打印的小型控制台应用程序,因此该桌面应用程序不会使用 Web 服务进行打印,而是使用参数调用该小型控制台应用程序。不是很优雅,但它有效。