Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 窗口服务是否因错误而自动停止?_C#_.net_Windows Services - Fatal编程技术网

C# 窗口服务是否因错误而自动停止?

C# 窗口服务是否因错误而自动停止?,c#,.net,windows-services,C#,.net,Windows Services,我有一个全天候运行的windows服务。此服务使用Renci.SshNet(第三方dll)连接到sftp服务器并下载和上载文件 我在事件查看器中获得了以下信息。我检查了日志文件,发现当这个错误出现时,代码没有运行在与SFTP服务器相关的地方 我已经在try-catch块中编写了所有代码,所以每个错误都记录到日志文件中 由于此错误,windows服务已停止 我想知道这个问题的根本原因,以及如何修改代码,使我的服务不再自动停止 Log Name: Application Source:

我有一个全天候运行的windows服务。此服务使用Renci.SshNet(第三方dll)连接到sftp服务器并下载和上载文件

我在事件查看器中获得了以下信息。我检查了日志文件,发现当这个错误出现时,代码没有运行在与SFTP服务器相关的地方

我已经在try-catch块中编写了所有代码,所以每个错误都记录到日志文件中

由于此错误,windows服务已停止

我想知道这个问题的根本原因,以及如何修改代码,使我的服务不再自动停止

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()”行。这一行的意思是,第三方库开发人员试图在最终确定期间释放托管的资源。只有很少的情况下,这是有用的。但是,同时,它非常危险,而且容易出错

    你应该骗我