Visual Studio HTTP处理器崩溃时出现代理捕获异常

iovurdzv  于 2023-01-14  发布在  其他
关注(0)|答案(1)|浏览(127)

我在代理中捕获异常时遇到问题

private static async Task Check()
        {
            foreach (var cookieList in CookieList)
            {
                var user = JsonReader.readJSON("dataproxy.json", "proxyDetails", "proxyuser");
                var pass = JsonReader.readJSON("dataproxy.json", "proxyDetails", "proxypass");
                var proxyIp = JsonReader.readJSON("dataproxy.json", "proxyDetails", "proxyip");
                var proxyPort = JsonReader.readJSON("dataproxy.json", "proxyDetails", "proxyport");
                var container = new CookieContainer();
                var handler = new HttpClientHandler();
                handler.CookieContainer = container;
                var client = new HttpClient(handler);
                WebProxy proxy = new WebProxy(proxyIp,Convert.ToInt32(proxyPort));
                if(user != null)
                {
                    proxy.Credentials = new NetworkCredential(user, pass);
                }                
                client.BaseAddress = BaseAddress; try
                {
                    handler.Proxy = proxy;
                }
                catch 
                {
                    LogSystem.SendMessage("Proxy Error!", Log.Type.Message);
                }

每当一个代理是不是工作我得到这个错误:

你知道如何捕捉这个错误,让它重试,如果没有然后跳过?

ee7vknir

ee7vknir1#

Net的设计者已经考虑到了这些问题,并为我们提供了一个名为UnhandledExceptionEventHandler的事件,通过它我们可以拦截未捕获的异常并进行处理,这个事件的事件参数UnhandledExceptionEventArgs e有两个属性,一个是ExceptionObject,这个属性返回拦截异常的对象示例,另一个属性是IsTerminating,它告诉我们这个异常是否会导致应用程序终止。让我们看看Asp.net应用程序如何拦截未捕获的异常。

第一步:创建一个实现IHttpModule接口的类

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace WebMonitor
{
    ///   <summary>
    ///  Summary description for UnhandledExceptionModule
    ///   </summary>
    public class UnhandledExceptionModule : IHttpModule
    {
        static object _initLock = new object();
        static bool _initialized = false;

        public UnhandledExceptionModule()
        {
            //
            //  TODO: Add constructor logic here
            //
        }

        void OnUnhandledException(object o, UnhandledExceptionEventArgs e)
        {
            // Do some thing you wish to do when the Unhandled Exception raised.

            try
            {
                using (System.IO.FileStream fs = new System.IO.FileStream(@" c:/testme.log ",

                      System.IO.FileMode.Append, System.IO.FileAccess.Write))

                {

                    using (System.IO.StreamWriter w = new System.IO.StreamWriter(fs, System.

                          Text.Encoding.UTF8))

                    {

                        w.WriteLine(e.ExceptionObject);
                    }
                }
            }
            catch
            {
            }
        }
        IHttpModule Members
     }
}

第二步:修改web.config

在system.web部分中添加

< httpModules >
     < add  name ="UnhandledExceptionModule"  type="WebMonitor.UnhandledExceptionModule"   />
   </ httpModules >

完成这两个步骤后,ASP.NET应用程序可以拦截未捕获的异常。

下面是测试代码:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void TestMe(object state)
    {
        byte[] buf = new byte[2];
        buf[2] = 0;
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(TestMe),

                 null);

    }
}

按下Button1后,w3wp.exe终止,异常信息记录在testme.log中。

相关问题