C# 窗口服务是否因错误而自动停止?
我有一个全天候运行的windows服务。此服务使用Renci.SshNet(第三方dll)连接到sftp服务器并下载和上载文件 我在事件查看器中获得了以下信息。我检查了日志文件,发现当这个错误出现时,代码没有运行在与SFTP服务器相关的地方 我已经在try-catch块中编写了所有代码,所以每个错误都记录到日志文件中 由于此错误,windows服务已停止 我想知道这个问题的根本原因,以及如何修改代码,使我的服务不再自动停止C# 窗口服务是否因错误而自动停止?,c#,.net,windows-services,C#,.net,Windows Services,我有一个全天候运行的windows服务。此服务使用Renci.SshNet(第三方dll)连接到sftp服务器并下载和上载文件 我在事件查看器中获得了以下信息。我检查了日志文件,发现当这个错误出现时,代码没有运行在与SFTP服务器相关的地方 我已经在try-catch块中编写了所有代码,所以每个错误都记录到日志文件中 由于此错误,windows服务已停止 我想知道这个问题的根本原因,以及如何修改代码,使我的服务不再自动停止 Log Name: Application Source:
Log Name: Application
Source: .NET Runtime
Date: 5/12/2012 10:49:12 AM
Event ID: 1026
Task Category: None
Level: Error
Keywords: Classic
User: N/A
Computer: FedEx-EDI-01
Description:
Application: Ess.SupplyChainService.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.Net.Sockets.SocketException
Stack:
at Renci.SshNet.Session.WaitHandle(System.Threading.WaitHandle)
at Renci.SshNet.Channels.Channel.Dispose(Boolean)
at Renci.SshNet.Channels.ChannelSession.Dispose(Boolean)
at Renci.SshNet.Channels.Channel.Dispose()
at Renci.SshNet.Sftp.SubsystemSession.Dispose(Boolean)
at Renci.SshNet.Sftp.SftpSession.Dispose(Boolean)
at Renci.SshNet.Sftp.SubsystemSession.Finalize()
Event Xml:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name=".NET Runtime" />
<EventID Qualifiers="0">1026</EventID>
<Level>2</Level>
<Task>0</Task>
<Keywords>0x80000000000000</Keywords>
<TimeCreated SystemTime="2012-05-12T14:49:12.000Z" />
<EventRecordID>3723</EventRecordID>
<Channel>Application</Channel>
<Computer>FedEx-EDI-01</Computer>
<Security />
</System>
<EventData>
<Data>Application: Ess.SupplyChainService.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.Net.Sockets.SocketException
Stack:
at Renci.SshNet.Session.WaitHandle(System.Threading.WaitHandle)
at Renci.SshNet.Channels.Channel.Dispose(Boolean)
at Renci.SshNet.Channels.ChannelSession.Dispose(Boolean)
at Renci.SshNet.Channels.Channel.Dispose()
at Renci.SshNet.Sftp.SubsystemSession.Dispose(Boolean)
at Renci.SshNet.Sftp.SftpSession.Dispose(Boolean)
at Renci.SshNet.Sftp.SubsystemSession.Finalize()
</Data>
</EventData>
</Event>
日志名称:应用程序
源:.NET运行时
日期:2012年12月5日上午10:49:12
事件ID:1026
任务类别:无
级别:错误
关键词:经典
用户:不适用
计算机:联邦快递-EDI-01
说明:
应用程序:Ess.SupplyChainService.exe
框架版本:v4.0.30319
描述:由于未处理的异常,进程已终止。
异常信息:System.Net.Sockets.SocketException
堆栈:
在Renci.SshNet.Session.WaitHandle(System.Threading.WaitHandle)
在Renci.SshNet.Channels.Channel.Dispose处(布尔值)
位于Renci.SshNet.Channels.ChannelSession.Dispose(布尔值)
在Renci.SshNet.Channels.Channel.Dispose()中
在Renci.SshNet.Sftp.SubsystemSession.Dispose(布尔值)
位于Renci.SshNet.Sftp.SftpSession.Dispose(布尔值)
在Renci.SshNet.Sftp.SubsystemSession.Finalize()上
事件Xml:
1026
2.
0
0x8000000000000
3723
应用
联邦快递-EDI-01
应用程序:Ess.SupplyChainService.exe
框架版本:v4.0.30319
描述:由于未处理的异常,进程已终止。
异常信息:System.Net.Sockets.SocketException
堆栈:
在Renci.SshNet.Session.WaitHandle(System.Threading.WaitHandle)
在Renci.SshNet.Channels.Channel.Dispose处(布尔值)
位于Renci.SshNet.Channels.ChannelSession.Dispose(布尔值)
在Renci.SshNet.Channels.Channel.Dispose()中
在Renci.SshNet.Sftp.SubsystemSession.Dispose(布尔值)
位于Renci.SshNet.Sftp.SftpSession.Dispose(布尔值)
在Renci.SshNet.Sftp.SubsystemSession.Finalize()上
您在那里遇到了一个套接字异常-您发布的堆栈跟踪没有包含足够的信息来说明发生这种情况的原因
由于未处理异常,因此进程终止,当然服务也因此停止
您需要找出异常发生的原因-添加更多日志记录并尝试捕获传入的套接字数据。您在那里遇到了一个套接字异常-您发布的堆栈跟踪没有包含足够的信息来说明发生此异常的原因 由于未处理异常,因此进程终止,当然服务也因此停止
您需要找出异常发生的原因-添加更多日志记录并尝试捕获传入的套接字数据。未经处理的异常将导致进程停止 一个答案是处理异常,但是:
- 仅处理异常并不能确保流程处于良好状态
- 有一小部分异常(例如,
)无法捕获:进程无法可靠地返回到已知状态StackOverflowException
Services.msc
)以在出现错误时重新启动adplus
(来自Windows调试工具)的工具,以便在出现故障时进行进程转储未经处理的异常将使您的进程停止 一个答案是处理异常,但是:
- 仅处理异常并不能确保流程处于良好状态
- 有一小部分异常(例如,
)无法捕获:进程无法可靠地返回到已知状态StackOverflowException
Services.msc
)以在出现错误时重新启动adplus
(来自Windows调试工具)的工具,以便在出现故障时进行进程转储如果存在未处理的异常,Windows服务将停止与任何其他应用程序一样工作,这就是您的情况。试着调试代码(让服务作为控制台应用程序运行是我的策略,但您也可以使用附加到进程)来检查异常发生的原因,并正确处理:服务应该以某种可靠的方式恢复,错误时重新启动选项和好友应该作为极端解决方案使用,例如,如果您不拥有代码 如果存在未处理的异常,Windows服务将停止与任何其他应用程序一样工作,这就是您的情况。试着调试代码(让服务作为控制台应用程序运行是我的策略,但您也可以使用附加到进程)来检查异常发生的原因,并正确处理:服务应该以某种可靠的方式恢复,错误时重新启动选项和好友应该作为极端解决方案使用,例如,如果您不拥有代码 根据您提供的堆栈跟踪,终结线程中由于垃圾收集而引发异常(请参阅堆栈跟踪中的“at Renci.SshNet.Sftp.SubsystemSession.Finalize”行) 由于您无法捕获此异常,因此它不会受到影响并停止您的进程。
这就是为什么“代码与SFTP服务器无关” 另外,如果您更仔细地查看堆栈跟踪,会看到“at Renci.SshNet.Channels.Channel.Dispose()”行。这一行的意思是,第三方库开发人员试图在最终确定期间释放托管的资源。只有很少的情况下,这是有用的。但是,同时,它非常危险,而且容易出错 你应该骗我