WCF сервис не возвращает коллекцию

321
04 октября 2017, 06:58

Пытаюсь сделать WCF сервис в виде приложения (без IIS). Стандартные типы данных возвращает. Но вот пользовательские коллекции нет. Мне нужно получать журнал событий с сервера. Вот что я написал:

[ServiceContract]
public interface IEventLogService
{
    // тест, возвращает строку ОК
    [OperationContract]
    string Test();
    //Получить список журнала событий из указаного журнала и типа(Error, Warning)
    [OperationContract]
    List<LogType> GetDataEventLog(string name, string type);
}
[ServiceBehavior]
public class EventLogService : IEventLogService
{
    public string Test()
    {
        return "OK";
    }
    public List<LogType> GetDataEventLog(string name, string type)
    {
        try
        {
            //создаем объект чтения журнала
            using (EventLog log = new EventLog())
            {
                //инициализация
                log.BeginInit();
                //выбор раздела журнала
                log.Log = name;
                if (log.Entries.Count > 0)//если журнал не пустой                    
                {
                    List<LogType> logs = new List<LogType>();
                    foreach (System.Diagnostics.EventLogEntry entry in log.Entries)
                    {
                        //отбирать только необходимый тип записи журнала
                        switch (type)
                        {
                            case "Error":
                                if (entry.EntryType != EventLogEntryType.Error)
                                    continue;
                                break;
                            case "Warning":
                                if (entry.EntryType != EventLogEntryType.Warning)
                                    continue;
                                break;                                
                        }

                        LogType newLog = new LogType()//заполнить запись
                        {
                            CategoryField = entry.Category,
                            EventIDField = entry.EventID,
                            TimeGeneratedField = entry.TimeGenerated,
                            SourceField = entry.Source,
                            UserNameField = entry.UserName,
                            EntryTypeField = entry.EntryType.ToString()
                        };
                        if (entry.Data.Length > 0)
                        {
                            // раскодировать
                            newLog.DataField = System.Text.Encoding.Default.GetString(entry.Data);                               
                        }
                        logs.Add(newLog);
                    }
                    // dataGridView1.DataSource = table;
                    Console.WriteLine("[" + DateTime.Now.ToShortTimeString() + "]\tSome Gringo want see your log");
                    return logs;
                }
                else
                {
                    Console.WriteLine("There are no entries in the log.");
                    return null;
                }
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("[" + DateTime.Now.ToShortTimeString() + "]\t" + e.Message);
            return null;
        }
    }
}

//ну и сам запуск
var host = new ServiceHost(typeof(EventLogService));
host.Open();
Console.WriteLine("Сервис запущен");
Console.ReadKey(true);

Сама пользовательская коллекция

[DataContract]
public class LogType
{
    /// <summary>
    /// Получает идентификатор события конкретного приложения для текущей записи события.
    /// </summary>
    int EventID { get; set; }
    /// <summary>
    /// Получает текст, связанный со свойством CategoryNumber для этой записи.
    /// </summary>
    string Category { get; set; }
    /// <summary>
    /// Получает тип события этой записи.
    /// </summary>
    string EntryType { get; set; }
    /// <summary>
    /// Получает имя приложения, создавшего это событие.
    /// </summary>
    string Source { get; set; }
    /// <summary>
    /// Получает местное время создания события.
    /// </summary>
    DateTime TimeGenerated { get; set; }
    /// <summary>
    /// Получает имя пользователя, который является инициатором этого события.
    /// </summary>
    string UserName { get; set; }

    /// <summary>
    /// Получает данные, связанные с этой записью.
    /// </summary>
    string Data { get; set; }


    [DataMember]
    public int EventIDField
    {
        get { return EventID; }
        set { EventID = value; }
    }
    [DataMember]
    public string CategoryField
    {
        get { return Category; }
        set { Category = value; }
    }
    [DataMember]
    public string EntryTypeField
    {
        get { return EntryType; }
        set { EntryType = value; }
    }
    [DataMember]
    public string SourceField
    {
        get { return Source; }
        set { Source = value; }
    }
    [DataMember]
    public DateTime TimeGeneratedField
    {
        get { return TimeGenerated; }
        set { TimeGenerated = value; }
    }
    [DataMember]
    public string UserNameField
    {
        get { return UserName; }
        set { UserName = value; }
    }
    [DataMember]
    public string DataField
    {
        get { return Data; }
        set { Data = value; }
    }
}
READ ALSO
Реализация метода возврата сообщения

Реализация метода возврата сообщения

Как реализовать метод GetFirstMessage()? Использовать вторую коллекцию?

264
не удалось преобразовать из system intptr в int [требует правки]

не удалось преобразовать из system intptr в int [требует правки]

ХЕЛП ЛЮДИ ОШИБКА УЖЕ ДОСТАЛА МЕНЯ!

239
Aforge Net работа с ProgressBar

Aforge Net работа с ProgressBar

Здравствуйте, проигрывается стандартный плеер Aforge, задается обработчик создания нового кадра

289