我创建了一个Windows服务来监视接收位置并使用WMI ManagementScope类范围发送端口事件,即启动/停止/启用/禁用/登记/未列出本地BizTalk服务器计算机:
string strScope = @"\\.\root\MicrosoftBizTalkServer";
但是,当我尝试指向远程机器/服务器以使用以下方法捕获事件时:
string strScope = string.Format(@"\\{0}\root\MicrosoftBizTalkServer", node.Address);
我收到奇怪的WMI错误 . 我试图指出的典型远程机器是一个类似的Windows服务器,其中一个很小的区别是它的BizTalk服务器指向位于网络中另一台服务器上的SQL服务器 .
经过大量的谷歌搜索和搜索,我发现信息指出可能的失败原因是当我们尝试在其SQL服务器在另一台机器上时访问远程BizTalk服务器时出现的经典“双跳”问题 .
在visual studio中,我没有获得足够的错误信息,我尝试了一个Windows内置工具“wbemtest.exe”来解决发生的事情只是为了发现一个很长的错误信息,如:
BizTalk Server无法访问SQL Server . 这可能是由于以下原因之一:\ n1 . 已拒绝当前用户的访问权限 . 以已被授予SQL权限的用户身份登录并重试,或授予当前用户访问SQL Server的权限 . \ N2 . SQL Server不存在或指定了无效的数据库名称 . 检查为SQL Server和数据库输入的名称,以确保它们在SQL Server安装期间提供的正确 . \ N3 . SQL Server存在,但当前未运行 . 使用Windows服务控制管理器或SQL企业管理器启动SQL Server,然后重试 . \ N4 . Microsoft SQL Server数据文件夹中已存在与指定数据库同名的SQL数据库文件 . \ n \ n来自OLEDB提供程序的内部错误:\“用户'登录失败'NT AUTHORITY \ ANONYMOUS LOGON' . \”“
我尝试使用管理服务 - >组件服务下的防火墙和DCOM设置,但没有任何设置可以通过“模拟”传递我的用户凭据并检索回接收位置/发送端口信息 .
请分享实际解决此问题的变通方法/解决方案/配置设置 .
2 回答
这只是一个双跃点问题,您面临的问题是因为您正在尝试运行服务并访问远程服务器BizTalk服务器,然后尝试登录到远程SQL服务器 . 您的凭据只能到达BizTalk服务器,但BizTalk服务器不会将您的凭据传递给另一台服务器 .
请参阅此链接以获取解决方案Similar Issue
经过大量研究和深入研究,该解决方案是通过为非域管理员启用/配置Kerberos身份验证来实现的 . 服务帐户用户和通信中涉及的机器,即客户端(机器发送基于WMI的请求),Biztalk节点(响应基于WMI的请求的机器)和SQL Server节点(机器托管/运行SQL Server数据库引擎服务,最重要的是Biztalk的数据库,包括消息框,跟踪,管理和SSO) .
这都是在单个域下完成的,并且为Biztalk节点和SQL Server节点以及所使用的服务帐户设置了委派 .
为服务帐户授予了DCOM权限,以便设置WMI和DTC(分布式事务处理协调器)权限 .
生成了适当的SPN,并为在委派模式下发起WMI请求的服务帐户授予了适当的SQL Server权限 .
已验证使用以下SQL查询为特定服务帐户启用了Kerberos: