|
@@ -14,6 +14,7 @@ using System.Linq;
|
|
|
using System.Net.Cache;
|
|
|
using System.Diagnostics;
|
|
|
using SXLibrary;
|
|
|
+using System.Threading;
|
|
|
|
|
|
namespace SufeiUtil
|
|
|
{
|
|
@@ -22,6 +23,75 @@ namespace SufeiUtil
|
|
|
/// </summary>
|
|
|
public class HttpHelper
|
|
|
{
|
|
|
+ #region 后台进程;
|
|
|
+ static int ms_ProcessID = -1;
|
|
|
+ static int ms_ProcessID2= -1;
|
|
|
+ private static readonly object ms_Lock = new object();
|
|
|
+ public static bool Tracert = false;
|
|
|
+ private void CallTracertBat()
|
|
|
+ {
|
|
|
+ Monitor.Enter(ms_Lock);
|
|
|
+ //是否已有批处理在执行;
|
|
|
+ if (ms_ProcessID != -1)
|
|
|
+ {
|
|
|
+ try
|
|
|
+ { // 查找该进程ID是否存在;
|
|
|
+ System.Diagnostics.Process bat = System.Diagnostics.Process.GetProcessById(ms_ProcessID);
|
|
|
+ // nothing to do;
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ ms_ProcessID = -1;
|
|
|
+ //if ((uint)ex.HResult == 0x80070057) {ms_ProcessID = -1;}
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if ( ms_ProcessID == -1 )
|
|
|
+ {
|
|
|
+ Process bat = new Process();
|
|
|
+ bat.StartInfo.FileName = "route-tracert.bat";
|
|
|
+ // 隐藏窗口;
|
|
|
+ bat.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
|
|
|
+ bat.Start();
|
|
|
+ // 记录进程id;
|
|
|
+ ms_ProcessID = bat.Id;
|
|
|
+ }
|
|
|
+
|
|
|
+ Monitor.Exit(ms_Lock);
|
|
|
+ }
|
|
|
+ private void CallPingBat()
|
|
|
+ {
|
|
|
+ Monitor.Enter(ms_Lock);
|
|
|
+ //是否已有批处理在执行;
|
|
|
+ if (ms_ProcessID2 != -1)
|
|
|
+ {
|
|
|
+ try
|
|
|
+ { // 查找该进程ID是否存在;
|
|
|
+ System.Diagnostics.Process bat = System.Diagnostics.Process.GetProcessById(ms_ProcessID2);
|
|
|
+ // nothing to do;
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ ms_ProcessID2 = -1;
|
|
|
+ //if ((uint)ex.HResult == 0x80070057) {ms_ProcessID = -1;}
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (ms_ProcessID2 == -1)
|
|
|
+ {
|
|
|
+ Process bat = new Process();
|
|
|
+ bat.StartInfo.FileName = "route-ping.bat";
|
|
|
+ // 隐藏窗口;
|
|
|
+ bat.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
|
|
|
+ bat.Start();
|
|
|
+ // 记录进程id;
|
|
|
+ ms_ProcessID2 = bat.Id;
|
|
|
+ }
|
|
|
+
|
|
|
+ Monitor.Exit(ms_Lock);
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
+
|
|
|
#region 预定义方变量
|
|
|
//默认的编码
|
|
|
private Encoding encoding = Encoding.Default;
|
|
@@ -101,6 +171,23 @@ namespace SufeiUtil
|
|
|
Log.WriteTimesdLog(string.Format("\r\nurl={0}\r\nPostdata={1}\r\nResult={2}\r\nStatus={3}\r\nElapsed={4}ms\r\n",
|
|
|
item.URL, item.Postdata, result.Html, result.StatusDescription, stopwatch.ElapsedMilliseconds.ToString()));
|
|
|
stopwatch.Reset();
|
|
|
+
|
|
|
+ switch ( result.StatusCode )
|
|
|
+ {
|
|
|
+ case HttpStatusCode.BadRequest:
|
|
|
+ case HttpStatusCode.NotFound:
|
|
|
+ case HttpStatusCode.GatewayTimeout:
|
|
|
+ case HttpStatusCode.BadGateway:
|
|
|
+ if (Tracert)
|
|
|
+ {
|
|
|
+ CallPingBat();
|
|
|
+ CallTracertBat();
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
return result;
|
|
|
}
|
|
|
#endregion
|