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);
}

我也不清楚如何更改此控制台应用程序以引用 Visual Studio 服务器实例(例如:localhost:1583/MyWebService.asmx?op=GetResponse),而不是创建 Web 服务的代理实例。我认为这也可以解决问题,因为 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配置手册(在页面上搜索word assembly)。这种方式更好,因为您不必添加

log4net.Config.XmlConfigurator.Configure(); 

进入您拥有的所有主机环境的初始化。

但请确保您有 log4net 配置app.configweb.config或者您拥有的任何配置文件。

于 2012-11-15T16:06:37.723 回答