Как передать данные от подписчика в службе WCF в другое консольное приложение? - PullRequest
3 голосов
/ 17 апреля 2019

Я написал приложение службы WCF и библиотеку классов (Logger.dll). Я написал код, используя шаблон публикации - подписки.

В библиотеке классов, отправка данных как путем публикации с использованием делегатов и событий. И он получает данные, подписываясь на события в приложении-службе WCF. Поэтому после размещения приложения-службы мне нужно отправить данные из службы WCF в другое консольное приложение. Как я могу отправить данные при подписке событий в службе WCF на другое консольное приложение? Кто-нибудь знает, как это сделать?

Logger.dll

public class Data
{
    public string ID { get; set; }
    public string Description { get; set; }
}

public delegate void LogHandler(Data log);

public class ClsSub
{
    public event LogHandler OnDataRetrieved;

    public void LoadData()
    {
        DataTable dt = GetData();

        foreach (DataRow row in dt.Rows)
        {
            Data logdata = new Data();
            if (row["Description"].ToString().Contains("User found"))
            {
                logdata.ID = row["UserID"].ToString();
                logdata.Description = row["Description"].ToString();
            }

            if (row["Description"].ToString().Contains("User not found"))
            {
                logdata.ID = row["UserID"].ToString();
                logdata.Description = row["Description"].ToString();
            }

            if (OnDataRetrieved != null)
            {
                OnDataRetrieved(logdata);
            }
        }
    }

    private DataTable GetData()
    {
        var result = new DataTable();
        result.Columns.Add("UserID", typeof(string));
        result.Columns.Add("Description", typeof(string));
        result.Rows.Add("user1", "description1");
        result.Rows.Add("user2", "description2");
        return result;
    }
}

public class ClsMain
{
    public event LogHandler OnDataRetrieved;

    public void ReadData()
    {
        ClsSub sub = new ClsSub();
        sub.OnDataRetrieved += OnDataRetrieved;
        sub.LoadData();
    }
}

WCF Сервис

Iservice1.cs

Using Logger;

[ServiceContract(CallbackContract = typeof(IDataServiceCallBack))]
public interface IDataService
{
    [OperationContract(IsOneWay = true)]
    void RetrieveLogData();
}

[ServiceContract]
public interface IDataServiceCallBack
{
    [OperationContract(IsOneWay = true)]
    void OnLoggerData(Data log);
}

Service1.svc.cs

public class Service1 : IDataService
{
    public IDataServiceCallBack callBack
    {
        get
        {
            return OperationContext.Current.GetCallbackChannel<IDataServiceCallBack>();
        }
    }

    public void RetrieveLogData()
    {
        ClsMain main = new ClsMain();
        main.OnDataRetrieved += ClsMain_OnDataRetrieved;
        main.ReadData();
    }

    private static void ClsMain_OnDataRetrieved(Data log)
    {
        // I am getting the data when the publisher publishes something.
        // I need to send this data to another console application.

        //Console.WriteLine(log.ID + " " + log.Description);
    }
}

Я получаю данные, когда издатель публикует что-либо, и подписчик подписывается на событие в службе WCF. Можно ли передать эти данные в другое консольное приложение? Кто-нибудь знает, как это сделать?

...