3

我编写了一个 WCF 服务应用程序和一个类库 ( Logger.dll)。我使用发布-订阅模式编写了代码。

在类库中,通过使用委托和事件发布来推送数据。它通过订阅 WCF 服务应用程序中的事件来获取数据。所以托管服务应用程序后,我需要将数据从 WCF 服务推送到另一个控制台应用程序。如何在将 WCF 服务中的事件订阅到另一个控制台应用程序时推送数据?有人知道怎么做吗?

记录器.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 服务

服务1.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);
}

服务1.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 服务中的事件时,我正在获取数据。是否可以将此数据推送到另一个控制台应用程序?有人知道该怎么做吗?

4

0 回答 0