我们有一个WCF服务托管在IIS中,当前调用VB6 DLL来完成其部分工作。这很好,但我们无法将服务部署到64位目标环境,而无需配置IIS在32位工作进程中运行它。进程外COM服务器在单元测试工具中正常工作,但不在实际服务中
我目前正在调查有关该限制的方法。将VB6 DLL移植到.NET是不可能的,因为各种原因,所以我在VB6中创建了一个ActiveX EXE包装器,以便该服务可以在64位和VB6部件中运行。
当我测试我得到这个错误的服务:
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,/ EXEC访问的在我的管理员级帐户而不是IIS工作进程帐户中执行,并且它工作正常,所以错误肯定是要做的权限。我不确定接下来要做什么。任何人都可以建议我可以检查的东西
我的测试环境是Windows XP/IIS 5.1
UPDATE:
IIS虚拟目录配置为匿名+ Windows访问; WCF服务只使用匿名身份验证,Windows身份验证是针对VS调试器的。任务管理器报告aspnet_wp.exe
进程肯定在ASPNET
帐户中运行。
我明确授予对所涉及的所有COM exes和dll上的ASPNET
和IUSR_<machine>
帐户的读取和执行访问权限。这没有什么区别。
我明确授予对DCOM配置中相关接口上的ASPNET
和IUSR_<machine>
帐户的本地启动和本地激活访问权限。这也没有区别。
当我看到它,我有3种选择:
- 不断试图让这个工作不知何故。
- 去整个猪,并在COM +宿主的EXE。
- 放弃。告诉用户必须将WCF服务配置为在64位Windows上的32位应用程序池中运行。
让IIS在32位应用程序池中运行它,你会打开自己的整个世界,试图解决这个问题。我的两分钱。 – 2011-06-01 16:32:31
尝试给您的IUSR_computername(Internet访客帐户),帐户访问您的exe。 – jac 2011-06-01 16:48:58
@Binary:你的意思是(a)试图避免COM +是一个坏主意,或(b)任何类型的64-32位COM互操作是一个坏主意,无论它如何托管? – 2011-06-02 13:59:52