为什么我的Web服务在成功处理2000个请求后无法处理请求?

时间:2013-11-01 05:04:46

标签: c# asp.net web-services iis

我的网络服务将使用print2flash软件将文档,文本和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);

这是我的错误日志信息

User Profile Service已成功启动。

  

Windows Management Instrumentation Service成功启动

     

事件代码:3001事件消息:请求已中止。事件   时间:10/31/2013 12:15:25 PM活动时间(UTC):2013年10月31日下午12:15:25   事件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:

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

1 个答案:

答案 0 :(得分:1)

这也有几个原因Kirk Woll增加了一些好处。

1.可能存在无限循环导致服务挂起  防爆。异常处理方法为异常处理调用相同的方法。 检查EventViewer中的EventLogs以获取这些错误。

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

<强>建议: 如果上述两种情况失败,那么您可以自动回收服务的应用程序池。 Change Application Pool recycle settings for automatic recycle after some request

修改

尝试以下方法。

 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(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);
  }

<强> EDIT2:

   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 method

public class Server2 : IDisposable
  {
   ....
   ....
  public void Dispose()
  {
   this = null;
  }
 }