Windows2000、Vusual Studio2002、framework1.0でコーディングをしています。
ある画面「WebForm1.aspx.cs」でエラーが発生した際、他クラスである
「ErrorHandling.cs」でエラー処理をさせています。
さらにそこから、エラーの緊急度によって「createLog.cs」クラスでエラーログ生成処理
を行っています。
そこで、「createLog.cs」内で「Response.AppendToLog(error!);」という記述をし
たのですが、エラーが発生してしまいます。「WebForm1.aspx.cs」などで同じ記述をして
も、エラーは出ないのですが・・・。また、using system.webも記述しています。
エラー内容は、「Exception Details: System.Web.HttpException: Response is not
available in this context.」というものです。
どなたかご存知の方がいらっしゃいましたら、どうかご教授ください。
Kumです。たびたび失礼します。
問題解決のために、以下のような記述が必要と聞きました。
System.Web.HttpResponse Response = new System.Web.HttpResponse();
Response.AppendToLog(This is error test.);
ただ、これだけだとnew System.Web.HttpResponse();の部分で
引数が必要らしいんです。
MSDN等を見ても分からないのですが、何を記述すればいよいのでしょうか。
ネットで、
string str = Filename;
TextWriter writer = new StreamWriter(str);
System.Web.HttpResponse Response = new System.Web.HttpResponse(writer);
のような記述を見つけました。
Filename を IIS のログファイルへのパスに置き換えます。
string str = C:\\WINNT\\SYSTEM32\\LogFiles\\W3SVC1\\ex030704;
ただし、アクセス権が無いと失敗するようです。
あるいは、WebForm1のResponseをそのクラスのメソッドのパラメータにするのが簡単かも知れ
ませんね。
public void Log(System.Web.HttpResponse res)
{
res.AppendToLog(Error!!);
}
シーさん
Kumです。回答していただき、ありがとうございます。
下記のようにコーディングしてみたところ
string str = C:\\WINNT\\system32\\LogFiles\\W3SVC1\\ex030704.log;
TextWriter writer = new StreamWriter(str, true);
System.Web.HttpResponse Response = new System.Web.HttpResponse(writer);
Response.AppendToLog(TEST);
下記のエラーが出ました。
The process cannot access the file C:\WINNT\system32\LogFiles\W3SVC1
\ex030704.log because it is being used by another process.
IISが動いているので出てしまうのかなと思ったのですが、詳細は分かりませんでした。
ですので、IISログはあきらめ、下記のようにしてしまいました。(抜粋)
FileInfo errorFile = new FileInfo(@C:\WINNT\system32\LogFiles\error.log);
StreamWriter stream = errorFile.AppendText();
stream.WriteLine(Test);
stream.Close();
お手数をおかけしました。ありがとうございました。
Kum