使用Log4Net的.NET Web Service日志记录无法在单独的客户端上运行

Rya*_*n H 0 .net c# log4net web-services

在我在本地构建的基本.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();
}
Run Code Online (Sandbox Code Playgroud)

我的单独客户端(控制台)应用程序如下所示:

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);
}
Run Code Online (Sandbox Code Playgroud)

我也不清楚如何更改此控制台应用程序以引用Visual Studio服务器实例(例如:localhost:1583/MyWebService.asmx?op = GetResponse),而不是创建Web服务的代理实例.我认为这也可以解决问题,因为Visual Studio服务器使用Global.asax,不是吗?

J0H*_*0HN 5

更简单的方法

将内部的log4net初始化移动static void Main:

static void Main(string[] args)
{
    log4net.Config.XmlConfigurator.Configure();
}
Run Code Online (Sandbox Code Playgroud)

不要忘记log4netapp.config新主机的文件中包含配置.

更好的方法

将你的服务转移到单独的项目(它已经是这样,对吗?)所以它被编译到它自己的程序集中.比申请

[assembly: log4net.Config.XmlConfigurator(Watch=true)]
Run Code Online (Sandbox Code Playgroud)

归因于assemlyInfo.cs.有关详细信息,请参阅log4net配置手册(assembly在页面上搜索单词).这种方式更好,因为您不必添加它

log4net.Config.XmlConfigurator.Configure(); 
Run Code Online (Sandbox Code Playgroud)

进入所有主机环境的初始化.

但要确保你有你的log4net的配置app.config,web.config或任何配置文件你.