Windows-Service 在 net.tcp 连接上失败,但控制台应用程序工作正常

Posted

技术标签:

【中文标题】Windows-Service 在 net.tcp 连接上失败,但控制台应用程序工作正常【英文标题】:Windows-Service fails on net.tcp connection but console app works fine 【发布时间】:2018-02-01 10:48:39 【问题描述】:

我构建了一个服务,该服务从 SQL 服务器导入和处理数据并将其输入到 SYSPRO。作为控制台应用程序,一切都在本地机器和服务器上完美运行。当我将控制台应用程序变成一项服务时,它在我的机器上进行了正确的登录后可以完美运行。当我第一次将服务放到服务器上时,当我尝试登录 SYSPRO 客户端时,它给了我一个 DNS 错误,即使使用正确的登录名也是如此。

private SYSPROWCFServicesPrimitiveClient eNetSession = 
new SYSPROWCFServicesPrimitiveClient("net.tcp://serverName:20000/SYSPROWCFService/Soap", 
SYSPROWCFBinding.NetTcp);

我将服务器名称更改为 localhost,它的地址和本地地址不再返回 DNS 错误,但不会初始化 SYSPRO 客户端。然而,它与位于不同服务器上的 SQL Server 没有问题。我认为它是连接字符串,但不确定我做错了什么,因为连接字符串在服务器上作为控制台应用程序工作得很好。我唯一的另一个猜测是该服务可能无法访问 net.tcp。有什么想法吗?

更新

看起来 DNS 设置正确,因为我可以 ping 另一台服务器及其自身。控制台和服务器都使用相同的连接字符串,我从服务返回的唯一错误消息如下图所示。

【问题讨论】:

【参考方案1】:

听起来像是一个安全上下文的事情。检查 Windows 服务配置为使用的帐户(本地系统、网络服务等)。尝试将帐户更改为运行控制台应用程序的用户。

默认情况下,控制台应用程序使用登录用户的帐户运行。另一方面,Windows 服务需要正确配置,因为它不使用当前用户凭据安装。

检查... 点击开始->运行->services.msc 查看“登录身份”列...如果它与登录到该站的用户不同,请将其更改为该帐户。

【讨论】:

它在安装期间设置为在 LocalSystem 下运行(我知道,安全风险。)。安装后,我将服务登录到其他服务和程序也用于在服务器之间进行通信的网络代理帐户。 我知道控制台应用程序在本地用户帐户下运行,控制台应用程序不是问题。但是,在我的本地机器上,我有一份正在运行且运行良好的服务副本。在我将服务安装到 SYSPRO 服务器上之前,问题不会出现。那时它可以很好地访问 SQL 服务器,但似乎无法访问自己。我可以从命令行 ping 自己,所以我认为 DNS 不是问题,但是,它似乎无法在 SYSPRO 服务器上创建甚至找不到 SYSPRO 客户端,但在其他任何地方都可以正常工作。 但这确实有效,以我自己的身份登录确实解决了问题。现在我只需要弄清楚为什么网络代理不工作。谢谢!

以上是关于Windows-Service 在 net.tcp 连接上失败,但控制台应用程序工作正常的主要内容,如果未能解决你的问题,请参考以下文章

windows下安装多个Redis实例

redis作为windows服务运行

net.tcp协议共享tcp端口的功能

WCF Net.tcp 仅在本地失败

Windows下配置Redis多实例

如何在 asp.net core 2.1 中使用 net.tcp 服务