C# FileUploadHandler.ashx处理每连续第5次请求需要99秒
我在web服务中有一个FileUploadHandler.ashx,用于在win forms应用程序中将文件上载到服务器 即使FileUploadHandler设置为async/sync(两者都尝试),每5次请求都需要时间 我有大量的文件,将它们循环上传,每连续第五次请求都会花费很多时间 我已经创建了一个日志文件来检查哪个请求需要时间,如下所示: 请求1;所用时间:0.0717544 请求2;所用时间:0.019239C# 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
请求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次未处理的异常。