繁体   English   中英

如何将COM对象Microsoft.Office.Interop部署到IIS,以便我的C#WCF服务引用起作用?

[英]How to deploy COM object Microsoft.Office.Interop to IIS so that my C# WCF service reference will work?

尝试从本地计算机上的IIS 7运行有关Microsoft.Office.Interop.Outlook的Web应用程序时出现错误,如下所示...

由于以下错误,检索具有CLSID {0006F03A-0000-0000-C000-000000000046}的组件的COM类工厂失败:80070005访问被拒绝。 (来自HRESULT的异常:0x80070005(E_ACCESSDENIED))。

当我从VS2010和Cassini运行相同的Web应用程序时,我没有问题。

当我从IIS 7运行Web应用程序时,我将VS2010指向IIS虚拟目录。 事实上,我什至让VS2010创建了虚拟目录。 因此,我能够从VS2010进行调试,并收集我在此处发布的错误。

我转到Microsoft.Office.Interop.Outlook.dll文件,并给每个人读取,写入,修改和删除。 只是为了排除安全性。

引用Microsoft.Office.Interop dll时,还有其他步骤吗? 我是否应该对此进行其他配置。 再次切换回在Cassini中运行,没有问题。

找到了一个解决方案,以具有实例化COM组件特权的用户身份模拟。

将此添加到您的web.config

<system.web>
  <compilation debug="true" targetFramework="4.0" />
  <identity impersonate="true" userName="domain\id" password="psswd"/>
  <authentication mode="Windows"> </authentication>
</system.web>

在我的服务器上,SharePoint已安装并在“网络服务”帐户下运行。 那将是一个隐藏的帐户,通常不允许运行COM对象。 如果您进入IIS并查看它正在使用哪个应用程序池(在“高级设置”下)。 然后检查该池的标识。 一位朋友建议我们使用命名帐户(例如[domain] \\ svcSharepoint)运行SharePoint应用程序池(和其他服务),以便您可以明确授予权限。 否则,网络服务帐户将显示为[domain] [计算机名称] $(注意,末尾的$,表示“隐藏帐户”)。

另一个因素是是否将其安装在Server 2008 R2上,因为UAC的功能要强大得多,并且可以肯定地拒绝这种交互。 关闭UAC有点冒险,但可能会成为赢家。

最后一个因素是检查该COM对象的DCOM配置。 [开始菜单,管理员工具] [组件服务] [DCOM Config]。 通过名称或GUID,属性,安全查找Outlook。

如果实际上您的应用程序发生访问冲突,这就是问题的根源,您可以通过简单地将引用设置为复制到bin目录来将资源与应用程序一起部署。 您可以通过在解决方案资源管理器中选择引用,转到属性,然后将“复制本地”属性更改为true来实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM