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