0

ローカルで構築している基本的な .NET Web サービス (asmx) で、Log4NET を使用してファイルにログを記録しようとしています。Visual Studio でデバッグ モードを起動し、提供された wsdl/test ページを使用してサービスをテストすると、これは正常に機能します。しかし、別のクライアントを使用しようとすると (サービスを呼び出すために C# コンソール アプリを作成しました)、期待どおりの応答が表示されますが、ログは記録されません。
(別のクライアント コードを以下に示します。Web サービスのビルド済み DLL への参照をインポートする必要がありました。)

私はこれに少し慣れていませんが、問題はVSサーバーまたはIIS(私が立ち往生している)の外で、Global.asaxが使用されていないためだと推測しています(ログ用の初期化コマンドが含まれています)。しかし、外部クライアントからテストする必要があります。クライアント アプリケーションの観点から Global.asax を初期化するにはどうすればよいですか? または、その必要を回避するにはどうすればよいですか? これでロギングの問題が解決するように聞こえますか?

私の Web サービス プロジェクトの Global.asax には、次のステートメントが含まれています。

protected void Application_Start(object sender, EventArgs e)
{
    log4net.Config.XmlConfigurator.Configure();
}

そして、私の別のクライアント (コンソール) アプリケーションは次のようになります。

static void Main(string[] args)
{
    MyWebService proxy = new MyWebService();

    MyWebService.Request request = new MyWebService.Request();
    request.Type = "Test";

    MyWebService.Response response = proxy.GetResponse(request);

    Console.WriteLine("RESPONSE CODE: " + response.StatusCode);
    Console.WriteLine("RESPONSE MSG: " + response.StatusMessage);
    Console.WriteLine("Press any key to continue...");
    Console.ReadKey(true);
}

Web サービスのプロキシ インスタンスを作成する代わりに、このコンソール アプリを変更して Visual Studio サーバー インスタンス (例: localhost:1583/MyWebService.asmx?op=GetResponse) を参照する方法も不明です。Visual Studio サーバーは Global.asax を利用しているので、それもうまくいくと思います。

4

1 に答える 1

7

より簡単な方法

log4netの初期化を内部に移動することですstatic void Main

static void Main(string[] args)
{
    log4net.Config.XmlConfigurator.Configure();
}

新しいホストのファイルにlog4net構成を含めることを忘れないでください。app.config

より良い方法

サービスを別のプロジェクトに移動して(すでにそうですよね?)、それ自体のアセンブリにコンパイルされます。適用するより

[assembly: log4net.Config.XmlConfigurator(Watch=true)]

の属性assemlyInfo.cs。詳細については、 log4net構成マニュアルを参照してください(ページで単語を検索assemblyしてください)。追加する必要がないので、この方法の方が優れています

log4net.Config.XmlConfigurator.Configure(); 

あなたが持っているすべてのホスト環境の初期化に。

ただし、log4net構成がapp.configweb.configまたは任意の構成ファイルにあることを確認してください。

于 2012-11-15T16:06:37.723 に答える