static int i = 0; static int contectCount = 20; private static System.Timers.Timer aTimer; static void Main(string[] args) { SetTimer(); Console.WriteLine("\nPress the Enter key to exit the application...\n"); Console.WriteLine("The application started at {0:HH:mm:ss.fff}", DateTime.Now); Console.ReadLine(); aTimer.Stop(); aTimer.Dispose(); Console.WriteLine("Terminating the application..."); } private static void SetTimer() { // Create a timer with a two second interval. aTimer = new System.Timers.Timer(2000); // Hook up the Elapsed event for the timer. aTimer.Elapsed += OnTimedEvent; aTimer.AutoReset = true; aTimer.Enabled = true; } static void OnTimedEvent(object source, System.Timers.ElapsedEventArgs e) { HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create("http://localhost:14238/HTMLPage.html");//这个是我本地的一个网页 HttpWebResponse myHttpWebResponse; try { myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse(); contectCount = 20; if (i == 0) { Console.WriteLine("网络连接成功"); i++; } } catch (Exception ex)//这个地方会报错,操作超时的错误 { --contectCount; if (contectCount == 0) { Console.WriteLine("网络连接失败"); } else if (contectCount > 0) { Console.WriteLine(contectCount); if(contectCount<10)//因为误报断开得错误,所以暂时用这个判断跳过 这个遇到得问题,只是我想知道这个错误到底怎么解决。 { i = 0; } } } }
System.Net.WebException: 操作超时
是这个(HttpWebResponse)myHttpWebRequest.GetResponse();
方法本身的问题,还是,定时器抽搐弄得问题。
一般http超时,先检查服务起来没有,手工能用postman或者其他httpclient调通,然后再看你写的调用代码,是不是写的对。
我印象里,本地用IIS Express起的服务不能用这样的方式调用,这个你用postman一试就知道了,因为IIS Express起的Web服务一般只用作本程序的调试,不开放别的程序(哪怕是同一个机器来调用)。
不管怎么说,先用httpclient试验。