2016-10-23 10 views
0

私はWebアプリケーションを持っていて、サーバーに公開するときに何度か、それはSystem.NullReferenceException: Object reference not set to an instance of an objectのエラーを返し、Global.asax Application_BeginRequestにヒットします(私はApplication_AuthenticateRequestを試しました - 同じ結果)。{C# - Logging} Application_BeginRequest()オブジェクト参照がオブジェクトのインスタンスに設定されていません

Global.asax Application_BeginRequestコード:

try 
    { 
     HttpRequest request = HttpContext.Current.Request; 
     string header = request.Headers["X-MicrosoftAjax"]; 
     if(header != "Delta=true") 
     { 
      string path = "~/Logs/TrafficAnalytics.txt"; 
      string txt = "Visit from: " + ClientInfo.GetClientIP() + " at: " + ClientInfo.GetClientLastRoute + ". Traceback below:\r\nIP Address:  " + ClientInfo.GetClientIP() + "\r\nHostname:   " + ClientInfo.GetClientHostname + "\r\nCoordinates:  " + ClientInfo.GetClientCoordinates() + "\r\nLocation:   " + ClientInfo.GetClientLocation() + "\r\nOS & Browser Info: " + ClientInfo.GetClientBrowserOs + "\r\nBrowser Info:  " + ClientInfo.GetClientBrowserInfo() + "\r\nOperating System: " + ClientInfo.GetClientOsInfo() + "\r\nISP:    " + ClientInfo.GetClientIsp(); 
      Logger.Create(path, txt); 
     } 
    } 
    catch (Exception ex) 
    { 
     HttpContext con = HttpContext.Current; 
     HttpException code = ex as HttpException; 
     string bos = Request.UserAgent; 
     string path = "~/Logs/ErrorReports.txt"; 
     string txt = "URL: " + con.Request.Url.ToString() + "\r\nError Message:  " + ex.Message + "\r\nAnalyzed Message:  " + ex.ToString() + "\r\nError Code:   " + code.GetHttpCode().ToString() + "\r\nIpAddressTraceResult: " + ClientInfo.GetClientIP() + "\r\nOS & Browser Info: " + bos; 
     Logger.Create(path, txt); 
    } 

Logger.csソース:エラーのみが時々起こっている

using System; 
using System.IO; 
using System.Web; 

public class Logger 
{ 
    public static void Create(string p, string t) 
    { 
     FileInfo path = new FileInfo(HttpContext.Current.Server.MapPath(p)); 
     string txt = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.ffffff") + " :::::::::: " + t + "\r\n------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------"; 
     path.IsReadOnly = false; 
     StreamWriter sw = new StreamWriter(path.ToString(), true); 
     sw.WriteLine(txt); 
     sw.Flush(); 
     sw.Close(); 
    } 
} 

それはusualyので、私は私が間違っているのかわからない動作します。すべての応答ありがとう...

+0

'ClientInfo'はおそらくnullです。アプリケーションをデバッグする必要があります。 – Rob

答えて

0

まあ、最良の答えは、特定の行がスローしていることを見つけるために完全なスタックトレースをデバッグまたは収集することです。

1つの明白な問題 - キャッチしている例外がHttpExceptionではない場合はどうなりますか?たとえば、StreamWriterのコンストラクタでログコードの例外が発生した場合はどうなりますか?それは7つの異なる例外を投げることができ、どれもHttpExceptionsではありません。

例外がHttpExceptionにキャストされず、code.GetHttpCode()がNullReferenceExceptionをスローする可能性があるため、codeの値はnullになります。

+0

私は自分のアプリを頻繁にデバッグしていると言っていると思いますが、問題はデバッグ時にこの問題が発生することがありましたが、しかし、私はいつも、VSがHttpException、null、デバッグコンソールでそのようなものを赤色に塗りつぶしていた部分に固執していましたが、私はこれについてGoogleに何を知らなかったのです。私は今、 'code'を削除しました(HTTPコード404、500などを取得しただけです)、今はうまくいくと思います。あなたの返事をありがとうございます:) – Dev

関連する問題