ha_ha_to_yang 2021-04-27 15:20 采纳率: 0%
浏览 10

asp.net调用windows service

主要是为了实现截图功能

我将asp.net web程序部署在IIS上之后,copyfromscreen函数出现句柄无效,搜索到的解决办法(在服务器桌面会话上捕获屏幕? - 问答 - 云+社区 - 腾讯云 (tencent.com)) ,但是里面的函数

WTSQueryUserToken(sessionID, out tokenHandle)
出错,显示客户没有特权

我打算用windows service来运行这个函数(似乎可以,我不确定),现在就不知道如何在已经部署的web中调用windows service 

我使用ServiceController获取到的service里不包含我编写的windows服务,是要把windows服务发布在IIS上通过web添加服务引用来实现吗,windows服务如何发布在IIS上?

还是IIS用户权限的问题,该怎样修改呢?(IIS是用的匿名访问,特定用户为IUSR,我将所有权限开启,还是不行)

 

  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-07-14 20:21
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题解答如下:
    1. 解决copyfromscreen函数句柄无效的方法是通过在服务器桌面会话上捕获屏幕。具体做法可以参考链接中提供的解决方案。
    2. 若要在已部署的 ASP.NET Web 应用中调用 Windows 服务,可以使用.NET 的 Inter-Process Communication(IPC)机制。简单来说,即在 Web 应用和 Windows 服务之间建立通信通道,通过这个通道实现功能的调用。以下是一个简单的案例: 首先,在 Windows 服务中编写一个用于截图的方法:
    public class ScreenCaptureService : ServiceBase
    {
        protected override void OnStart(string[] args)
        {
            base.OnStart(args);
        }
        protected override void OnStop()
        {
            base.OnStop();
        }
        public void CaptureScreen()
        {
            // 实现截图功能的代码
        }
    }
    

    然后,在 ASP.NET Web 应用中调用 Windows 服务的方法:

    using System.ServiceProcess;
    public class ScreenCaptureServiceClient
    {
        public void CaptureScreen()
        {
            using (ServiceController sc = new ServiceController("ScreenCaptureService"))
            {
                sc.ExecuteCommand(/*定义一个自定义命令,用于调用截图方法*/);
            }
        }
    }
    

    注意,为了能够在 ASP.NET Web 应用中访问 Windows 服务,需要设置 Windows 服务的适当权限和通信机制。 3. 若要在 IIS 上发布 Windows 服务,可以使用一种称为 Windows Communication Foundation(WCF)的技术。WCF 可以帮助你建立基于 XML 的服务,从而实现跨应用程序域的通信。你可以将 Windows 服务封装到 WCF 服务中,然后将 WCF 服务发布在 IIS 上。这样,ASP.NET Web 应用就可以通过 HTTP 或其他传输协议访问 Windows 服务。 4. 若匿名访问的 IIS 用户(IUSR)无法正常调用 Windows 服务,可以尝试以下几点改进: - 确保 Windows 服务及其相关资源(如文件、注册表项等)的权限设置正确,允许匿名用户进行访问; - 尝试使用具有更高权限的账户来运行 Windows 服务,例如 LocalSystem 或 NetworkService; - 考虑使用 Windows 身份验证机制,将 ASP.NET Web 应用与 Windows 服务绑定到同一用户账户来确保通信畅通。 希望以上信息能对您有所帮助。如果您有任何疑问或需要进一步协助,请随时提出。

    评论

报告相同问题?

悬赏问题

  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同