c# - 无法在 127.0.0.1 端口 555 上打开 TCP channel (SocketException : No Such Host Is Known)

标签 c# tcp windows-services socketexception quartz.net-2.0

我已经在 127.0.0.1 端口 555 上运行 Quartz 调度程序 Windows 服务大约 2 年了。从几天前开始,我无法再开始我的服务。当我查看代码时,我发现无法启动 TcpChannel 对象。

IChannel chan;
chan = new TcpChannel(props, null, formatprovider);

当我在我的 cmd 上执行 netstat 时,我没有在 ListeningEstablished 中找到地址。我在我的防火墙上也找不到任何与此端口有关的新规则。

该服务基于 Quartz.net 调度程序。

服务日志:

2016-02-25 10:19:58,847 [9] INFO  Quartz.Impl.StdSchedulerFactory [(null)] - Quartz.NET properties loaded from configuration file 'C:\Users\pedram.mobedi\Documents\GitHub\Postbag\build\Debug\quartz.config'
2016-02-25 10:19:58,958 [9] INFO  Quartz.Util.DBConnectionManager [(null)] - Registering datasource 'default' with db provider: 'Quartz.Impl.AdoJobStore.Common.DbProvider'
2016-02-25 10:19:58,965 [9] INFO  Quartz.Impl.StdSchedulerFactory [(null)] - Using default implementation for object serializer
2016-02-25 10:19:58,996 [9] INFO  Quartz.Impl.StdSchedulerFactory [(null)] - Using custom data access locking (synchronization): Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore
2016-02-25 10:19:59,002 [9] INFO  Quartz.Impl.StdSchedulerFactory [(null)] - Using default implementation for ThreadExecutor
2016-02-25 10:19:59,099 [9] INFO  Quartz.Core.SchedulerSignalerImpl [(null)] - Initialized Scheduler Signaller of type: Quartz.Core.SchedulerSignalerImpl
2016-02-25 10:19:59,107 [9] INFO  Quartz.Core.QuartzScheduler [(null)] - Quartz Scheduler v.2.2.4.400 created.
2016-02-25 10:19:59,128 [9] INFO  Quartz.Impl.AdoJobStore.JobStoreTX [(null)] - JobStoreTX initialized.
2016-02-25 10:19:59,263 [9] INFO  Quartz.Core.QuartzScheduler [(null)] - Scheduler QuartzScheduler_$_NON_CLUSTERED shutting down.
2016-02-25 10:19:59,270 [9] INFO  Quartz.Core.QuartzScheduler [(null)] - Scheduler QuartzScheduler_$_NON_CLUSTERED paused.
2016-02-25 10:19:59,287 [9] INFO  Quartz.Core.QuartzScheduler [(null)] - Scheduler QuartzScheduler_$_NON_CLUSTERED Shutdown complete.
2016-02-25 10:19:59,321 [9] ERROR Quartz.Server.QuartzServer [(null)] - Server initialization failed:Unable to bind scheduler to remoting.
Quartz.SchedulerException: Unable to bind scheduler to remoting. ---> System.Net.Sockets.SocketException: No such host is known
   at System.Net.Dns.InternalGetHostByName(String hostName, Boolean includeIPv6)
   at System.Net.Dns.GetHostEntry(String hostNameOrAddress)
   at System.Runtime.Remoting.Channels.CoreChannel.GetMachineIp()
   at System.Runtime.Remoting.Channels.Tcp.TcpServerChannel.SetupMachineName()
   at System.Runtime.Remoting.Channels.Tcp.TcpServerChannel..ctor(IDictionary properties, IServerChannelSinkProvider sinkProvider, IAuthorizeRemotingConnection authorizeCallback)
   at System.Runtime.Remoting.Channels.Tcp.TcpServerChannel..ctor(IDictionary properties, IServerChannelSinkProvider sinkProvider)
   at System.Runtime.Remoting.Channels.Tcp.TcpChannel..ctor(IDictionary properties, IClientChannelSinkProvider clientSinkProvider, IServerChannelSinkProvider serverSinkProvider)
   at Quartz.Simpl.RemotingSchedulerExporter.RegisterRemotingChannelIfNeeded() in c:\Users\pedram.mobedi\Documents\GitHub\Postbag\Quartz.NET-2.2.4\src\Quartz\Simpl\RemotingSchedulerExporter.cs:line 120
   at Quartz.Simpl.RemotingSchedulerExporter.Bind(IRemotableQuartzScheduler scheduler) in c:\Users\pedram.mobedi\Documents\GitHub\Postbag\Quartz.NET-2.2.4\src\Quartz\Simpl\RemotingSchedulerExporter.cs:line 71
   at Quartz.Core.QuartzScheduler.Bind() in c:\Users\pedram.mobedi\Documents\GitHub\Postbag\Quartz.NET-2.2.4\src\Quartz\Core\QuartzScheduler.cs:line 375
   at Quartz.Core.QuartzScheduler.Initialize() in c:\Users\pedram.mobedi\Documents\GitHub\Postbag\Quartz.NET-2.2.4\src\Quartz\Core\QuartzScheduler.cs:line 352
   --- End of inner exception stack trace ---
   at Quartz.Core.QuartzScheduler.Initialize() in c:\Users\pedram.mobedi\Documents\GitHub\Postbag\Quartz.NET-2.2.4\src\Quartz\Core\QuartzScheduler.cs:line 366
   at Quartz.Impl.StdSchedulerFactory.Instantiate() in c:\Users\pedram.mobedi\Documents\GitHub\Postbag\Quartz.NET-2.2.4\src\Quartz\Impl\StdSchedulerFactory.cs:line 1046
   at Quartz.Impl.StdSchedulerFactory.GetScheduler() in c:\Users\pedram.mobedi\Documents\GitHub\Postbag\Quartz.NET-2.2.4\src\Quartz\Impl\StdSchedulerFactory.cs:line 1120
   at Quartz.Server.QuartzServer.GetScheduler() in c:\Users\pedram.mobedi\Documents\GitHub\Postbag\Quartz.NET-2.2.4\server\Quartz.Server\QuartzServer.cs:line 62
   at Quartz.Server.QuartzServer.Initialize() in c:\Users\pedram.mobedi\Documents\GitHub\Postbag\Quartz.NET-2.2.4\server\Quartz.Server\QuartzServer.cs:line 47 [See nested exception: System.Net.Sockets.SocketException (0x80004005): No such host is known
   at System.Net.Dns.InternalGetHostByName(String hostName, Boolean includeIPv6)
   at System.Net.Dns.GetHostEntry(String hostNameOrAddress)
   at System.Runtime.Remoting.Channels.CoreChannel.GetMachineIp()
   at System.Runtime.Remoting.Channels.Tcp.TcpServerChannel.SetupMachineName()
   at System.Runtime.Remoting.Channels.Tcp.TcpServerChannel..ctor(IDictionary properties, IServerChannelSinkProvider sinkProvider, IAuthorizeRemotingConnection authorizeCallback)
   at System.Runtime.Remoting.Channels.Tcp.TcpServerChannel..ctor(IDictionary properties, IServerChannelSinkProvider sinkProvider)
   at System.Runtime.Remoting.Channels.Tcp.TcpChannel..ctor(IDictionary properties, IClientChannelSinkProvider clientSinkProvider, IServerChannelSinkProvider serverSinkProvider)
   at Quartz.Simpl.RemotingSchedulerExporter.RegisterRemotingChannelIfNeeded() in c:\Users\pedram.mobedi\Documents\GitHub\Postbag\Quartz.NET-2.2.4\src\Quartz\Simpl\RemotingSchedulerExporter.cs:line 120
   at Quartz.Simpl.RemotingSchedulerExporter.Bind(IRemotableQuartzScheduler scheduler) in c:\Users\pedram.mobedi\Documents\GitHub\Postbag\Quartz.NET-2.2.4\src\Quartz\Simpl\RemotingSchedulerExporter.cs:line 71
   at Quartz.Core.QuartzScheduler.Bind() in c:\Users\pedram.mobedi\Documents\GitHub\Postbag\Quartz.NET-2.2.4\src\Quartz\Core\QuartzScheduler.cs:line 375
   at Quartz.Core.QuartzScheduler.Initialize() in c:\Users\pedram.mobedi\Documents\GitHub\Postbag\Quartz.NET-2.2.4\src\Quartz\Core\QuartzScheduler.cs:line 352]

更新:主机文件

# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

# localhost name resolution is handled within DNS itself.
#   127.0.0.1       localhost
#   ::1             localhost

127.0.0.1       localhost

更新 2:quartz.config

# Quartz Config

quartz.threadPool.type = Quartz.Simpl.SimpleThreadPool, Quartz
quartz.threadPool.threadCount = 10
#quartz.threadPool.threadPriority = Normal

# Settings for using Quartz as a windows service
quartz.scheduler.exporter.type = Quartz.Simpl.RemotingSchedulerExporter, Quartz
quartz.scheduler.exporter.port = 555
quartz.scheduler.exporter.bindName = Postbag
quartz.scheduler.exporter.channelType = tcp
quartz.scheduler.exporter.channelName = httpQuartz

# SQLite settings
quartz.jobStore.type = Quartz.Impl.AdoJobStore.JobStoreTX, Quartz
quartz.jobStore.misfireThreshold = 60000
quartz.jobStore.lockHandler.type = Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz
quartz.jobStore.useProperties = true
quartz.jobStore.dataSource = default
quartz.jobStore.tablePrefix = qrtz_
quartz.jobStore.driverDelegateType = Quartz.Impl.AdoJobStore.SQLiteDelegate, Quartz
quartz.dataSource.default.provider = SQLite-10
quartz.dataSource.default.connectionString = Data Source=.\jobs.db;Version=3

最佳答案

这意味着您绑定(bind)了一个不存在的主机名。也许您已将其指向另一个位置。

1、是否修改了防火墙规则?可能是你阻止了你的程序或者你已经阻止了对 127.0.0.1 的所有访问

2、你的主机名是域名吗?如果是,则意味着域不再指向这台机器。您应该在 HOST 文件中重新指向它:

Win+R,输入以下命令:

notepad.exe %windir%\system32\drivers\etc\hosts

然后您可以检查域是否已经在该文件中。如果是并且以“#”开头,则删除“#”。如果没有,请输入以下内容:

127.0.0.1 [your domain name]

例如:

127.0.0.1 test.cn

3、如果主机名是“127.0.0.1”,应该不会发生。那可能是你操作系统的问题

关于c# - 无法在 127.0.0.1 端口 555 上打开 TCP channel (SocketException : No Such Host Is Known),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35623041/

相关文章:

c# - SQL 服务器 : how to detect unregarded values from a range of integers

c# - 从所有网页中删除 .aspx

iPhone/Android 实时通信、XMPP、原始 TCP?

java - 使用BufferedOutputStream/BufferedInputStream的socket随机接收虚假数据

.net - 无法向我的 Windows 服务应用程序添加对 System.Web 的引用

c# - Dapper.Contrib 和 MiniProfiler(适用于 MySql)集成问题

c# - Int 到字符串 : cannot convert from 'method group' to 'string'

c# - 每次连接到 ASP.net 应用程序时,是否都会创建一个新线程?

c# - Windows 服务加 GUI/C#

VB.net TCPListner 窗口服务