asp.net - 在 IIS 上运行的 aspx 代码隐藏中连接到 COM 接口(interface)?

标签 asp.net windows iis com atl

我创建了一个 Windows 服务(一个基于 Visual Studio ATL 向导的 exe),它公开了一个 COM 接口(interface)。作为进程内服务器或 Windows 服务运行没有问题。我需要 Windows 服务,因为我需要一些进程在 IIS 访问之外可用。

我一直在创建一些调用我的服务的网页 (aspx/C#),并且在 Visual Studio .NET 开发服务器中进行的所有测试都运行良好。现在,我正在尝试将网页推送到 IIS 7(在 Windows 7 上运行)以进行进一步测试。但是,当页面在 IIS 下运行时,对我的 COM 接口(interface)的调用都失败并显示错误

“由于以下错误,检索组件的 COM 类工厂失败:80070005 访问被拒绝。(HRESULT 异常:0x80070005 (E_ACCESSDENIED))。”

我已验证该服务是:

  • 在 HKCR\Clsid\下向 Windows 注册(注意,我注册运行“myservice.exe/RegServer”,因为 regsvr32.exe 仅适用于 dll's)
  • myservice.exe 对 IIS_IUSRS 用户具有读取和执行权限
  • 是一个 64 位的 exe(所以应该加载到默认的 IIS 应用程序池空间)
  • 在 .NET Developement Server 调试器(但不是 IIS)中运行良好

知道为什么这行不通吗?与 exe 与 dll 中包含的 COM 接口(interface)有关吗?

IIS 是否有可能调用在 Windows 服务中公开的 COM 接口(interface)?

最佳答案

我认为您需要在 DCOM Config 下授予对您网站的应用程序池进程的访问权限才能使用您的 COM 对象。

  • 转到组件服务
  • > 计算机 > 我的电脑 > DCOM 配置分支
  • 在列表中找到您的服务的 AppID 或名称。右键单击它并选择属性。
  • 打开“安全”标签
  • 选择启动和激活权限并选择自定义。
  • 授予应用程序池进程(可能是 ASPNET,但检查您站点的 IIS 应用程序池属性)以下内容:本地启动和本地激活。

如果这能解决您的问题,请告诉我们。

顺便说一句:

> is a 64bit exe (so should load in the default IIS app-pool space)

这不完全正确。应用程序池是 ISS 控制的进程。无论如何,您的服务都在自己独立的进程中运行。因此,您的服务与 IIS 应用程序池无关。

关于asp.net - 在 IIS 上运行的 aspx 代码隐藏中连接到 COM 接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15563083/

相关文章:

javascript - 使用 javascript 通过 asp.net 进行验证

服务器上 GetThumbnailImage 中的 C# 内存不足异常

asp.net - 发生错误时在ASP.NET站点上重置IIS

asp.net - Razor 向 HTML 添加新属性

JavaScript : show the measure of data transfer between client and server

windows - 是否可以在没有管理员权限的情况下安装 .appxbundle(UWP/XAML 应用程序)?

windows - cmd.exe/k 开关

asp.net - IIS 配置 - PROPFIND、OPTIONS 动词被忽略并被视为 GET?

c# - 如何删除具有相同相册 ID 的所有图像文件?

c++ - 使用 Visual C++ 在桌面上绘图