2011-06-01 51 views
1

我们有一个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. 

一些谷歌搜索后,我发现,这是由于两种:

  1. 调用的MS Office组件
  2. DCOM权限不正在配置
  3. NTFS文件权限不允许对IIS工作进程标识进行读取/执行访问(我的环境中为ASPNET

其中:

  1. 绝对不适用
  2. 也不适用;我不是在DCOM或COM +中托管EXE,只是一个简单的COM进程外激活
  3. 这看起来很可能;然而,我检查的权限,和NTFS报告该Users基(其ASPNET是的成员)确实已读出到文件

我试图从一个单元测试夹具调用EXE,/ EXEC访问的在我的管理员级帐户而不是IIS工作进程帐户中执行,并且它工作正常,所以错误肯定是要做的权限。我不确定接下来要做什么。任何人都可以建议我可以检查的东西

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

UPDATE:

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

我明确授予对所涉及的所有COM exes和dll上的ASPNETIUSR_<machine>帐户的读取和执行访问权限。这没有什么区别。

我明确授予对DCOM配置中相关接口上的ASPNETIUSR_<machine>帐户的本地启动和本地激活访问权限。这也没有区别。

当我看到它,我有3种选择:

  • 不断试图让这个工作不知何故。
  • 去整个猪,并在COM +宿主的EXE。
  • 放弃。告诉用户必须将WCF服务配置为在64位Windows上的32位应用程序池中运行。
+2

让IIS在32位应用程序池中运行它,你会打开自己的整个世界,试图解决这个问题。我的两分钱。 – 2011-06-01 16:32:31

+0

尝试给您的IUSR_computername(Internet访客帐户),帐户访问您的exe。 – jac 2011-06-01 16:48:58

+0

@Binary:你的意思是(a)试图避免COM +是一个坏主意,或(b)任何类型的64-32位COM互操作是一个坏主意,无论它如何托管? – 2011-06-02 13:59:52

回答

2

您的错误是未经授权的访问例外。因此,问题可能与权利有关。

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

同时检查您的事件日志,他们可能是有关正在使用的帐户的信息。

+0

感谢您的建议设拉子,看我最新的更新 – 2011-06-02 13:56:31

+0

尝试一个IISReset,也许权利的变化并没有影响当前会议 – 2011-06-02 18:22:27

+0

好点。我会尽快再试一次(我已经暂时转向其他方面) – 2011-06-03 08:48:27

相关问题