0

WCF Web サービス プロジェクトで作業し、log4net を使用していますが、C:\temp などの安全なディレクトリにある外部 log4net 構成ファイルを使用してログも作成しない限り、ログに書き込むことができません。 C:\temp などの安全なディレクトリに保存します。

「安全な」ディレクトリとは、実際には C:\users または C:\inetpub\wwwroot の下にないすべてのディレクトリのことです。サービスがデプロイされているフォルダーに log4net 構成ファイルまたはログ自体を配置しようとすると、C:\inetpub\wwwroot\<projectName>何も実行されません (エラーは発生せず、ログは作成されず、何も起こりません)。しかし、C:\temp の下にある log4net 構成ファイルから構成をロードし、ログを C:\temp に書き込むと、正常に動作します。

私は C:\temp を使用したくありませんが、サービスが展開されている inetpub にログを置き、web.config と同じ場所に置きたいと考えています。これは明らかにユーザー権限の問題であることはわかっていますが、どうすればよいでしょうか?

また、web.config ファイルから log4net 構成を読み取ることができません。そのため、最初に外部 log4j 構成ファイルを使用してみました。

ここでかなりの数の投稿を読み、その指示に従ってすべてをセットアップしました。IISでホストされているWCF Webサービスのlog4net構成を保存するためのベストプラクティスと、ログインを保存できるようにするためにできることについて、正しい方向にプッシュする必要がありますwwwroot/<myprojectfolder>

私が読んだ投稿の1つはこれでした... IIS 7.5によってホストされているWCFのlog4netログファイルの書き込みなし

これが私がこれまでに得たものです...

AssemblyInfo.cs ファイルには、次のものがあります。構成ファイルを指定する方法と、構成ファイルを指定しないで web.config を使用できるようにする方法の両方を試しました。

//[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
[assembly: log4net.Config.XmlConfigurator(Watch = true)]

手動で追加する必要があった Global.asax には、次のものがあります。Configure() を呼び出すときに C:\temp のような安全なディレクトリにファイルを指定すると、動作します...

XmlConfigurator.Configure(); 
var logger = LogManager.GetLogger(typeof(Global)); 
logger.Info("Starting up services"); 

そして、私のサービス実装ファイルには、これがあります...

private static readonly log4net.ILog logger = log4net.LogManager.GetLogger
                (System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

何か案は?

編集

開発ボックスにVS2008でWindows 7 Pro x86を使用し、ローカルIISに展開しています。

4

1 に答える 1

1

私はダミーです...私はこれにあまりにも長い間取り組んだ後、最終的にStackOverflowの質問をしました.質問をするだけで、脳の中で何かをノックアウトしたに違いありません。

サービスが展開されているフォルダーの IUSR、NETWORK SERVICE、および IIS_IUSRS ユーザーに書き込みと変更のアクセス許可を与えることで、これを修正しました。そして出来上がり。

これらのすべてのユーザーがアクセス許可を必要とするかどうかはわかりませんが、少なくとも 1 人はアクセス許可を必要としていました。

とにかく、問題は解決しました。

これが他の誰かを助けてくれることを願っています.

于 2012-06-09T01:20:21.347 に答える