swagger 通过作为Windows服务托管的ASP.NET Core-Web-API打印

3qpi33ja  于 2023-02-04  发布在  Windows
关注(0)|答案(1)|浏览(136)

我是ASP.NET Core-Web-API的新手,也许你能给我一些提示。我使用ASP.NET Core 7.0。我将我的出版物作为Windows服务托管。作为基础,我使用weather forecast from Microsoft的演示应用程序。我对此进行了扩展,以便我可以列出所有本地Windows打印机,并通过另一个界面打印简单的字符串。
当我通过Visual Studio构建我的ASP.NET Core-Web-API时,我可以选择在调试或发布模式下使用“https”或“IIS Express”。通过Swagger,我可以使用我所有的功能,甚至打印也可以。

现在,我的应用程序作为Windows服务托管,而且可以通过Swagger访问该应用程序。我可以列出我的打印机,也可以获取天气预报数据。但我不能再创建打印了吗?

  • 调用时出现无限循环,但状态代码为200 OK。在我的打印机队列中也找不到作业。
    *我通过Visual Studio进行的宿主与我在Windows服务中进行的宿主的行为是否不同?
  • 我的Windows服务是通过本地管理员帐户启动的,我的打印机也可供每个人使用。

我使用以下软件包

<PropertyGroup>
    <TargetFramework>net7.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="7.0.0" />
    <PackageReference Include="Microsoft.AspNetCore.Hosting.WindowsServices" Version="7.0.2" />
    <PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
    <PackageReference Include="System.Drawing.Common" Version="7.0.0" />
  </ItemGroup>

我用PageDocument创建我的文档,在Visual Studio中工作正常,但在Windows服务中不行。

PrintDocument pd = new PrintDocument();            
    pd.PrinterSettings.PrinterName = printer;            
    pd.PrintPage += new PrintPageEventHandler(this.pd_PrintPage);
    pd.Print();

对于System.PrintingSystem.Drawing.Printing,我也看到了提示。因此,我认为这是因为我作为Windows服务托管的缘故。
不支持在Windows服务或ASP.NET应用程序或服务中使用System.Printing命名空间中的类。尝试从这些应用程序类型之一中使用这些类可能会产生意外问题,如降低服务性能和运行时异常。

ufj5ltwl

ufj5ltwl1#

这个问题应该是权限问题,请找到打印机服务,更改登录用户。
您可以使用Process Monitor进行验证。

相关链接

Problem with Windows Service and network printers

相关问题