.NET Web API部署IIS后连接OPC DA服务器的权限配置问题
解决IIS部署.NET Web API连接OPC DA服务器的权限与连接问题
问题概述
开发的.NET Web API作为传统OPC DA服务器的隧道,使用TitaniumAS.Opc.Client库连接OPC服务器。在Visual Studio中运行正常,但部署到IIS后出现两类问题:
- 使用默认
ApplicationPoolIdentity作为应用池标识时,OPC连接被拒绝,错误信息如下:
Error connecting to host <hostname> because System.Runtime.InteropServices.ExternalException (0x80070005): CoCreateInstanceEx: Access is denied. at TitaniumAS.Opc.Client.Interop.System.Com.CreateInstance(Guid clsid, String host, NetworkCredential credential) at TitaniumAS.Opc.Client.Interop.System.Com.CreateInstanceWithBlanket(Guid clsid, String host, NetworkCredential credential, ComProxyBlanket comProxyBlanket) at TitaniumAS.Opc.Client.Common.OpcServerEnumeratorAuto.CLSIDFromProgId(String progId, String host) at TitaniumAS.Opc.Client.Da.OpcDaServer.<>c__DisplayClass19_0.<Connect>b__0(String host, String progId) at TitaniumAS.Opc.Client.Common.UrlParser.Parse[T](Uri opcServerUrl, Func`3 withProgId, Func`3 withCLSID) at TitaniumAS.Opc.Client.Da.OpcDaServer.Connect() at RestOPC.Controllers.ValuesController.Read(OPCrequestRead data) in C:\...\ValuesController.cs:line 54
- 将应用池标识改为有权限连接OPC的
opc_user后,Web API请求被强制关闭,错误信息如下:
requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(10054, 'An existing connection was forcibly closed by the remote host', None, 10054, None))
解决思路与步骤
1. 配置DCOM权限以允许opc_user访问OPC服务器
OPC DA基于DCOM通信,需确保opc_user拥有足够的DCOM权限:
- 运行
dcomcnfg打开组件服务,依次展开组件服务 > 计算机 > 我的电脑 > DCOM配置 - 找到目标OPC服务器对应的DCOM对象,右键选择属性
- 在安全选项卡中:
- 配置启动和激活权限:点击编辑限制,添加
opc_user并赋予对应权限(本地/远程启动、激活,根据部署场景选择) - 配置访问权限:点击编辑限制,添加
opc_user并赋予本地/远程访问权限
- 配置启动和激活权限:点击编辑限制,添加
- 若OPC服务器在远程机器,需在该机器的本地安全策略中,给
opc_user添加以下用户权限:- 作为批处理作业登录
- 作为服务登录
- 从网络访问此计算机
2. 配置IIS应用池与站点的权限
将应用池标识改为opc_user后,需确保该用户拥有Web API运行所需权限:
- 找到Web API的部署目录,右键属性 > 安全,添加
opc_user并赋予读取&执行、列出文件夹内容、读取权限 - 检查IIS站点的身份验证设置:
- 若使用匿名身份验证,确保其匿名用户标识设置为
应用池标识(即opc_user) - 若启用其他身份验证方式,需确保客户端凭据能正确传递,且
opc_user拥有对应权限
- 若使用匿名身份验证,确保其匿名用户标识设置为
- 检查应用池高级设置:
- 若OPC服务器为32位,需启用启用32位应用程序选项
- 确认.NET CLR版本与Web API项目的目标框架匹配
3. 排查10054连接重置错误
该错误通常与防火墙、网络或权限配置相关,可通过以下方式排查:
- 查看Windows事件查看器:检查系统日志(DCOM相关错误)和IIS日志(请求失败的详细信息)
- 本地测试OPC连接:使用
opc_user登录IIS服务器,运行基于TitaniumAS.Opc.Client的测试程序连接OPC服务器,确认连接是否正常 - 检查防火墙设置:
- 在IIS服务器上,允许HTTP/HTTPS端口(默认80/443)的入站流量
- 在OPC服务器上,允许DCOM相关端口(默认135端口+动态端口范围)的入站流量;跨机器部署时需在两台机器的防火墙中开放对应端口
4. 额外注意事项
- 若OPC服务器与IIS服务器为不同机器,建议使用域用户作为
opc_user;若使用本地用户,需在两台机器上创建用户名和密码完全一致的本地用户 - 确认Web API代码中OPC服务器的连接配置正确:使用正确的ProgID/CLSID,未硬编码错误凭据(应用池标识运行时会自动使用
opc_user的身份)
内容的提问来源于stack exchange,提问作者Dariva
相关产品推荐
相关产品推荐

