Прежде всего простите за мой плохой английский)
Я прочитал много статей о регистрации log4net, но, к сожалению, моя проблема еще не решена ...
У меня проблема с входом в систему через log4net в службах WCF, размещенных в IIS.
некоторые части важного кода
части моего сервисного кода:
using System;
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
namespace Service
{
[ServiceBehavior]
public class MyService : IService
{
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
часть метода обслуживания
public string Name()
{
log.Info("return name ");
return "NAME";
}
это мой конфигурационный файл для сервиса для log4net
?xml version="1.0"?>
<configuration>
<!-- Register a section handler for the log4net section -->
<configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
</configSections>
<appSettings>
<!-- To enable internal log4net logging specify the following appSettings key -->
<!-- <add key="log4net.Internal.Debug" value="true"/> -->
</appSettings>
<!-- This section contains the log4net configuration settings -->
<log4net>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<file value="log-file.txt"/>
<appendToFile value="true"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%ndc] ID=%property{EventID} - %message%newline" />
</layout>
</appender>
<!-- Define some output appenders -->
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%ndc] ID=%property{EventID} - %message%newline" />
</layout>
</appender>
<!-- Setup the root category, add the appenders and set the default level -->
<root>
<level value="ALL" />
<appender-ref ref="LogFileAppender" />
<appender-ref ref="ConsoleAppender" />
</root>
</log4net>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>
crossdomain.xml
clientaccesspolicy.xml
Service.svc
файлы настроены и присутствуют в каталоге
C: \ Inetpub \ Wwwroot
и мой сервис работает успешно, но журнал не пишет ...
Вопрос:
1) где должен находиться конфигурационный файл Service.config с конфигурацией log4net?
2) моя библиотека lib.dll и Service.config находится в C: \ inetpub \ wwwroot \ bin. Это нормально?
Пожалуйста, помогите мне решить эту проблему.
Я пробую более 10 различных вариантов входа. Все они работают в приложении WindowsForms, но не работают в службе, размещенной в IIS.
Дополнительная информация: когда я вызываю метод NAME в сервисе? Я пытаюсь записать файл в текущий каталог через File.Create, и он работает, но файл регистрации не создается, и я не знаю, как его решить.
Спасибо всем за понимание моего английского и за помощь.)
или если у вас есть или вы можете создать примитивную рабочую службу WCF с регистрацией в log4net, которая может быть опубликована через IIS, напишите в этом ответе пример кода для моего тестирования в моей среде.
Большое спасибо.
Привет.
Спасибо за ответ.
Сейчас я пытаюсь описать мою ситуацию в деталях для получения дополнительной информации
Первый шаг: я создаю новый проект. Тип проекта - сервисная библиотека WCF.
Мой код интерфейса для сервиса
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
namespace MyService
{
[ServiceContract]
public interface IMyService
{
[OperationContract]
string ReturnName();
}
}
Мой класс обслуживания
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MyService
{
public class MyService:IMyService
{
public string ReturnName()
{
return "Return name";
}
}
}
Затем из визуальной студии я публикую свой сервис для IIS.
как результат - новые файлы сервиса в каталоге сайта (http://img854.imageshack.us/img854/456/62137541.png)
web.config file for this service is
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true"/>
</system.web>
<system.serviceModel>
<services>
<service name="MyService.MyService">
<endpoint address="" binding="wsHttpBinding" contract="MyService.IMyService">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
<host>
<baseAddresses>
<add baseAddress="http://localhost:8732/Design_Time_Addresses/MyService/Service1/"/>
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
Теперь я создаю тестовое консольное приложение для проверки сервиса. Я добавляю сервисную ссылку в консольное приложение и пишу код
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TestWCFLog.ServiceReference1;
namespace TestWCFLog
{
class Program
{
static void Main(string[] args)
{
MyServiceClient service = new MyServiceClient();
Console.WriteLine( service.ReturnName());
Console.ReadLine();
}
}
}
И это работа. (http://img836.imageshack.us/img836/1718/52151311.png)
Теперь скажите, пожалуйста, что я должен добавить к своему сервисному коду и к файлу web.config?
Как я могу добавить логинтинг для сервиса?
Я пробую много образцов, но это не работает.
Спасибо за ответ.
Спасибо.