c# - 无法在 Interop.QBFC13.IQBSessionManager 从注册表中读取密钥(HRESULT 异常:0x80040150 (REGDB_E_READREGDB))
问题描述
在部署 QuickBooks Web 连接器调用的 Web 服务更新期间,我们没有遇到与Interop.QBFC13.IQBSessionManager
. 请注意我们的代码都在开发环境中工作,并且过去在我们的生产服务器上工作过。
我们在 64 位 Windows 2016 服务器上运行,但将 IIS 站点用于我们的 Web 服务作为 32 位运行,并将项目编译为 x86 并验证 dll 是 x86。
我们从这个错误开始,然后将 App Pool Identity 权限添加到与此类 Id/ 关联的注册表项中
错误消息:System.Web.Services.Protocols.SoapException:服务器无法处理请求。---> System.InvalidCastException:无法将类型为“Interop.QBFC13.QBSessionManagerClass”的 COM 对象转换为接口类型“Interop.QBFC13.IQBSessionManager”。此操作失败,因为 IID 为“{50F59D7F-4E65-45D8-8F19-135F9FE05296}”的接口的 COM 组件上的 QueryInterface 调用因以下错误而失败:不支持此类接口(来自 HRESULT 的异常:0x80004002 (E_NOINTERFACE)) .
之后,错误消息从No such interface supported...
变为Library Not Registered
。
现在它的给予
System.Runtime.InteropServices.COMException:无法在 Interop.QBFC13.IQBSessionManager.CreateMsgSetRequest 从注册表中读取密钥(HRESULT 异常:0x80040150 (REGDB_E_READREGDB))
但它没有说明它正在尝试读取哪个注册表项。
它总是在我们的代码中触发错误的相同位置:
IMsgSetRequest msgSetRq = sessMgr.CreateMsgSetRequest(qbXMLCountry, (Int16)qbXMLMajorVers, (Int16)qbXMLMinorVers);
我们已经尝试卸载、重新安装 QB SDK、QBFC13_0Installer.exe 和 QBXMLRP2Installer.exe ......所有这些都在卸载和重新安装后重新启动。
解决方案
并不是实际问题的真正答案,但您通常可以使用Process Monitor找出注册表的权限(和其他)问题。
实际问题似乎是IIS APPPool
对注册表项没有适当的权限。
推荐阅读
- latex - 如何删除 LaTex 中图形的自动编号?
- reactjs - Nginx/React/Django:CORS 问题
- javascript - 函数丢失所有数据
- odata - Odata 过滤器 DateTimeOffset
- salesforce - 是否可以使用 CronTrigger 作业 ID 来确定作业是否已中止或无效?
- python - 是否可以使用 Python requests.Session 将连接适配器注册到多个前缀?
- sql - SQL查询以查找日期列中的间隙
- c++ - 为什么 C++ 中的可变长度数组在某些大小上重叠?
- python - 如何根据 Python 中的索引仅创建一个类的实例?
- java - 如何在 Spark docker-compose 网络中提交 jar?