Vb.net 进程外COM服务器在单元测试线束中可以正常工作,但在实际服务中不能正常工作
我们有一个托管在IIS中的WCF服务,该服务当前调用VB6 DLL来完成部分工作。这很好,但是如果不配置IIS以在32位工作进程中运行它,我们就无法将服务部署到64位目标环境 我目前正在调查绕过这一限制的方法。由于各种原因,无法将VB6 DLL移植到.NET,因此我在VB6中围绕DLL创建了一个ActiveX EXE包装器,以便该服务可以64位运行,VB6部分可以32位运行 当我测试该服务时,出现以下错误: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
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.
通过谷歌搜索,我发现这是由于:
ASPNET
在我的环境中)Users
组(它是ASPNET
的成员)确实对该文件具有读取/执行权限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,也许权限的更改没有影响当前会话很好。我会尽快再试一次(我暂时换了别的工作)