这个礼拜使用VS2008开发一套通过RTC即时告知软件系统运行异常信息的成。
结构是: Web Client / Windows Client + WCF Service + RTC Protocol
在服务器端部署RTC DLL后,通过WCF进行消息发送的调用,在调试时WCF服务报错:
检索 COM 类工厂中 CLSID 为 {7A42EA29-A2B7-40C4-B091-F6F024AA89BE} 的组件时失败,原因是出现以下错误: 80070005。
经过2天排查,发现是WCF的代理身份不具有创建COM组件对象的权限(此问题,以前在进行WORD开发时也遇到过,当时通过修改DCOM运行权限后解决),由于是采用的WCF 因此解决方法有点不一样,只需要在WCF站点的web.config文件中添加如下节点即可。
<wsHttpBinding>
<binding name="wsHttpBindingConfig" maxReceivedMessageSize="6553600">
<security mode="Message">
<transport clientCredentialType="Windows" proxyCredentialType="Windows" />
</security>
</binding>
</wsHttpBinding>
对应的service的contract也要用这个BINDING。
同时在对应的service 代码上添加说明:
/// <summary>
/// 通过RTC发送消息
/// </summary>
/// <param name="OpLog"></param>
/// <returns></returns>
[OperationBehavior(Impersonation = ImpersonationOption.Allowed)]
public void SendMessage(string uri, string message)
{
//代码
}
WCF在调用COM组件上的配置确实比之前的ASP.NET方式简单,至少不需要去改动组件服务了。
至此,问题解决!