0

我的网络服务将使用 print2flash 软件将 doc、文本和 pdf 文件转换为 flash 文件,但是在它没有处理之后,它可以正常工作大约 2000 个请求,我收到操作超时错误消息。如果我重新启动机器服务对于另外 2000 个请求工作正常。谁能帮助我可能是什么原因?以及如何解决这个问题?

这是我遇到问题的代码。

        Print2Flash3.Server2 obj = new Print2Flash3.Server2();
        Print2Flash3.BatchProcessingOptions batchProcess = new      BatchProcessingOptions();
        batchProcess.BeforePrintingTimeout = 60000;
        batchProcess.AfterPrintingTimeout = 10000;
        batchProcess.PrintingTimeout = 120000;
        batchProcess.ActivityTimeout = 30000;
        batchProcess.KillProcessIfTimeout = ThreeStateFlag.TSF_YES;
        batchProcess.ApplyChanges();



        obj.ConvertFile(inputFilename, outputFullPath, null, batchProcess, null);

这是我的错误日志信息

用户配置文件服务已成功启动。

Windows Management Instrumentation 服务已成功启动

事件代码:3001 事件消息:请求已中止。事件时间:10/31/2013 12:15:25 PM 事件时间 (UTC):10/31/2013 12:15:25 PM 事件 ID:c0911a4071c940c580fc3d75d3c36f6e 事件序列:2826 事件发生:1 事件详细代码:0 应用程序信息: 应用程序域:/LM/W3SVC/1/ROOT/code-17-130276759869328000 信任级别:完整应用程序虚拟路径:/code 应用程序路径:C:\inetpub\wwwroot\code\ 机器名:服务器进程信息:进程ID: 1048 进程名称:w3wp.exe 帐户名称:server\Administrator 异常信息:异常类型:HttpException 异常消息:请求超时。

Request information: 
Request URL: url
Request path: path
User host address: server
User:  
Is authenticated: False 
Authentication Type:  
Thread account name: server\Administrator    Thread information: 
Thread ID: 13 
Thread account name: server\Administrator 
Is impersonating: False 
Stack trace:

这是我不断收到的错误消息。

4

1 回答 1

1

这有几个原因,Kirk Woll也添加了一些优点。

1.可能存在导致服务挂起的无限循环。异常处理方法调用相同的异常处理方法。检查 EventViewer 中的 EventLogs 以获取此类错误(如果有)。

2.内存泄漏,可能是你的应用程序在使用后没有释放内存。关闭任何不需要的连接,完成工作后处理未使用的对象。尝试任何内存泄漏工具

建议: 如果以上两种情况都失败了,那么您可以为服务自动回收应用程序池。 更改应用程序池回收设置以在某些请求后自动回收

编辑:

尝试以下。

 obj.ConvertFile(inputFilename, outputFullPath, null, batchProcess, null);
  //not sure if your object has similar methods or not but you can give it a try.
 obj.Close();   
 obj.Dispose();

或使用 using 样式。

using(Print2Flash3.Server2 obj = new Print2Flash3.Server2())
  {
        Print2Flash3.BatchProcessingOptions 
        batchProcess = new        BatchProcessingOptions();
        batchProcess.BeforePrintingTimeout = 60000;
        batchProcess.AfterPrintingTimeout = 10000;
        batchProcess.PrintingTimeout = 120000;
        batchProcess.ActivityTimeout = 30000;
        batchProcess.KillProcessIfTimeout = ThreeStateFlag.TSF_YES;
        batchProcess.ApplyChanges();

        obj.ConvertFile(inputFilename, outputFullPath, null, batchProcess, null);
  }

编辑2:

   obj.ConvertFile(inputFilename, outputFullPath, null, batchProcess, null);
   obj = null; //As the object is not disposable, you need to release the memory
               //manually.

如果Print2Flash3.Server2是自定义类,则从 IDisposable 接口派生它并实现Dispose 方法

public class Server2 : IDisposable
  {
   ....
   ....
  public void Dispose()
  {
   this = null;
  }
 }
于 2013-11-01T06:37:00.010 回答