Vb.net 进程外COM服务器在单元测试线束中可以正常工作,但在实际服务中不能正常工作

Vb.net 进程外COM服务器在单元测试线束中可以正常工作,但在实际服务中不能正常工作,vb.net,wcf,iis,vb6,com-interop,Vb.net,Wcf,Iis,Vb6,Com Interop,我们有一个托管在IIS中的WCF服务,该服务当前调用VB6 DLL来完成部分工作。这很好,但是如果不配置IIS以在32位工作进程中运行它,我们就无法将服务部署到64位目标环境 我目前正在调查绕过这一限制的方法。由于各种原因,无法将VB6 DLL移植到.NET,因此我在VB6中围绕DLL创建了一个ActiveX EXE包装器,以便该服务可以64位运行,VB6部分可以32位运行 当我测试该服务时,出现以下错误: Type: System.UnauthorizedAccessException Mes

我们有一个托管在IIS中的WCF服务,该服务当前调用VB6 DLL来完成部分工作。这很好,但是如果不配置IIS以在32位工作进程中运行它,我们就无法将服务部署到64位目标环境

我目前正在调查绕过这一限制的方法。由于各种原因,无法将VB6 DLL移植到.NET,因此我在VB6中围绕DLL创建了一个ActiveX EXE包装器,以便该服务可以64位运行,VB6部分可以32位运行

当我测试该服务时,出现以下错误:

Type: System.UnauthorizedAccessException
Message: Retrieving the COM class factory for component with CLSID {9AE7303B-D159-43F6-B1A5-52D297581820} failed due to the following error: 80070005.
通过谷歌搜索,我发现这是由于:

  • 调用MS Office组件
  • 未配置DCOM权限
  • NTFS文件权限不允许对IIS工作进程标识进行读取/执行访问(
    ASPNET
    在我的环境中)
  • 其中:

  • 绝对不适用
  • 也不适用;我不是在DCOM或COM+中托管EXE,只是一个简单的COM进程外激活
  • 这看起来很有可能;但是,我检查了权限,NTFS报告说
    Users
    组(它是
    ASPNET
    的成员)确实对该文件具有读取/执行权限
  • 我尝试从单元测试装置调用EXE,该装置在我的管理级别帐户而不是IIS工作进程帐户中执行,它工作正常,因此错误肯定与权限有关。我不知道下一步该怎么办。有人能给我提些建议吗

    我的测试环境是Windows XP/IIS 5.1

    更新:

    IIS虚拟目录配置为匿名+Windows访问;WCF服务仅使用匿名身份验证,Windows身份验证用于VS调试器。任务管理器报告说,
    aspnet_wp.exe
    进程肯定在
    aspnet
    帐户中运行

    我明确授予对所有涉及的COM EXE和DLL上的
    ASPNET
    IUSR\uu
    帐户的读取和执行权限。这没什么区别

    我明确授予了对DCOM配置中相关接口上的
    ASPNET
    IUSR\uu
    帐户的本地启动和本地激活访问权限。这也没什么区别

    在我看来,我有3个选择:

    • 想办法让它继续工作
    • 全力以赴,在COM+中托管EXE
    • 放弃。告诉用户必须将WCF服务配置为在64位Windows上的32位应用程序池中运行

      • 您的错误是未经授权的访问异常。因此,这个问题可能与权利有关

        您可以检查32位工作进程的安全上下文是什么


        另外,请检查您的事件日志,其中可能有关于正在使用哪个帐户的信息。

        让IIS在32位应用程序池中运行它,尝试解决这一问题会让您面临巨大的伤害。我的两分钱。试着给你的IUSR_computername(Internet来宾帐户),帐户访问你的exe。@Binary:你的意思是(a)试图避免COM+是个坏主意,还是(b)任何类型的64-32位COM互操作都是个坏主意,不管它是如何托管的?@Beaner:谢谢你的建议,请参阅我的最新版本updates@Christian:混合64位和32位COM(或COM+)互操作是个坏主意。您是否要求该服务应作为64位应用程序运行?或者仅仅是因为它在64bat的机器上,你想让它有额外的触角?试试IISReset,也许权限的更改没有影响当前会话很好。我会尽快再试一次(我暂时换了别的工作)