C# FileUploadHandler.ashx处理每连续第5次请求需要99秒

C# FileUploadHandler.ashx处理每连续第5次请求需要99秒,c#,asp.net,.net,winforms,generic-handler,C#,Asp.net,.net,Winforms,Generic Handler,我在web服务中有一个FileUploadHandler.ashx,用于在win forms应用程序中将文件上载到服务器 即使FileUploadHandler设置为async/sync(两者都尝试),每5次请求都需要时间 我有大量的文件,将它们循环上传,每连续第五次请求都会花费很多时间 我已经创建了一个日志文件来检查哪个请求需要时间,如下所示: 请求1;所用时间:0.0717544 请求2;所用时间:0.019239 请求3;所用时间:0.0297877 请求4;所用时间:0.0041714

我在web服务中有一个FileUploadHandler.ashx,用于在win forms应用程序中将文件上载到服务器

即使FileUploadHandler设置为async/sync(两者都尝试),每5次请求都需要时间

我有大量的文件,将它们循环上传,每连续第五次请求都会花费很多时间

我已经创建了一个日志文件来检查哪个请求需要时间,如下所示:

请求1;所用时间:0.0717544 请求2;所用时间:0.019239
请求3;所用时间:0.0297877 请求4;所用时间:0.0041714
请求5;所用时间:99.9442763 请求6;所用时间:0.031179
请求7;所用时间:0.0332562 请求8;所用时间:0.0037856
请求9;所用时间:0.0283765 请求10;所用时间:99.9690294

我的FileUploadHandler.ashx代码如下:

 /// <summary>
/// Summary description for FileUploadHandler
/// </summary>
public class FileUploadHandler : IHttpAsyncHandler
{
    public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData)
    {
        AsynchOperation asynch = new AsynchOperation(cb, context, extraData);
        asynch.StartAsyncWork();
        return asynch;
    }

    public void EndProcessRequest(IAsyncResult result)
    {
    }

    public void ProcessRequest(HttpContext context)
    {

    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

class AsynchOperation : IAsyncResult
{
    private bool _completed;
    private Object _state;
    private AsyncCallback _callback;
    private HttpContext _context;

    private GCloudUploadingModel gclouduploadingdatamodel;

    bool IAsyncResult.IsCompleted { get { return _completed; } }
    WaitHandle IAsyncResult.AsyncWaitHandle { get { return null; } }
    Object IAsyncResult.AsyncState { get { return _state; } }
    bool IAsyncResult.CompletedSynchronously { get { return false; } }

    public AsynchOperation(AsyncCallback callback, HttpContext context, Object state)
    {
        _callback = callback;
        _context = context;
        _state = state;
        _completed = false;
    }




    public void StartAsyncWork()
    {
        try
        {

            ThreadPool.QueueUserWorkItem(new WaitCallback(StartAsyncTask), null);
        }
        catch (Exception ex)
        {

            // SEND ERROR MAIL TO TECHNICAL TEAM
            using (CommonBussinessAccess ErrorSending = new CommonBussinessAccess())
            {
                ErrorSending.SendFailureInfoEmailToTechnicalTeam(new PracticeModel(), this.GetType().Name, "StartAsyncWork", ex.Message, ex, new EMRWebExceptionTraceLogModel());
            }
        }
        finally
        {
            _completed = true;
            _callback(this);
        }


    }

  private void StartAsyncTask(Object workItemState)
  {
        try
        {
                  //Uploading code....
        }
        finally
        {

        }
  }
//
///FileUploadHandler的摘要说明
/// 
公共类FileUploadHandler:IHTTPasynchHandler
{
公共IAsyncResult BeginProcessRequest(HttpContext上下文、AsyncCallback cb、Object extraData)
{
AsynchOperation asynch=新的AsynchOperation(cb、上下文、外部数据);
asynch.StartAsyncWork();
异步返回;
}
公共无效EndProcessRequest(IAsyncResult结果)
{
}
公共void ProcessRequest(HttpContext上下文)
{
}
公共布尔可重用
{
得到
{
返回false;
}
}
}
类异步操作:IAsyncResult
{
私人住宅竣工;
私有对象状态;
私有异步回调\u回调;
私有HttpContext\u上下文;
专用GCloudUploadingModel gclouduploadingdatamodel;
bool IAsyncResult.IsCompleted{get{return\u completed;}
WaitHandle IAsyncResult.AsyncWaitHandle{get{return null;}}
对象IAsyncResult.AsyncState{get{return}
bool IAsyncResult.CompletedSynchronously{get{return false;}}
公共异步操作(异步回调、HttpContext上下文、对象状态)
{
_回调=回调;
_上下文=上下文;
_状态=状态;
_完成=错误;
}
公共无效StartAsyncWork()
{
尝试
{
QueueUserWorkItem(新的WaitCallback(StartAsyncTask),null);
}
捕获(例外情况除外)
{
//向技术团队发送错误邮件
使用(CommonbusinessAccess ErrorSending=new CommonbusinessAccess())
{
ErrorSending.SendFailureInfoEmailToTechnicalTeam(新的PracticeModel(),this.GetType()。名称,“StartAsyncWork”,例如Message,例如new-EMRWebExceptionTraceLogModel());
}
}
最后
{
_完成=正确;
_回调(这个);
}
}
私有void StartAsyncTask(对象工作项状态)
{
尝试
{
//正在上载代码。。。。
}
最后
{
}
}
请帮助…

这是基于

  • rapidFailProtectionInterval
    :指定重置进程的故障计数之前的分钟数
  • RapidFailProtectionMaxCrash
    :指定在
    rapidFailProtectionInterval
    属性指定的分钟数内允许的最大故障数
两个属性的默认值均为5。这意味着如果在5分钟内有5个未处理的异常,则应用程序将重新启动

如果要使用IIS管理器更改这些值,则可以通过选择应用程序的应用程序池来查找这些设置→ 高级设置→ <属性网格中的代码>最大故障和
故障间隔(分钟)


但我在服务中没有遇到任何异常,池重新启动问题的任何其他原因??应用程序重新启动有多种原因,例如在应用程序目录中写入内容。但它会立即重新启动应用程序。因为您的应用程序每5次请求就重新启动一次,所以对我来说,这是一种5分钟内发生5次未处理的异常。