我有一个Windows服务,其中包含返回类型DataTable
public partial class ServiceForCount : ServiceBase
{
public DataTable AllData
{
get;
set;
}
public ServiceForCount()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
}
protected override void OnStop()
{
}
protected override void OnCustomCommand(int sizeOfFile)
{
//base.OnCustomCommand(command);
}
}
如果我想从我的应用程序中调用事件,我可以像
一样调用 ServiceController sc = new ServiceController("ServiceForCount");
sc.ExecuteCommand(size);
我想将DataTable
放入我的应用程序中。我怎么能这样做。
答案 0 :(得分:4)
ServiceController.ExecuteCommand
无法做到这一点。它只是一种方式,无论如何它的目的都不是那样。
您可以通过在Windows服务(WCF自托管,WebApi OWIN自托管)或远程处理中托管Web服务来实现。需要公开的所有Web服务都是一种不返回数据表而是返回对象列表的方法。因此,您需要将DataTable转换为IEnumerable<DataObject>
,其中DataObject
是您的服务合同。
你可以为初学者调查这些:
答案 1 :(得分:2)
要与Windows服务通信,服务需要提供端点。
该服务可以打开套接字并开始侦听传入的消息/请求。作为响应,服务可以序列化数据表(或任何其他对象)并将其传回。
请参阅:Socket Server in Windows Service
对于协议:您可以使用标准Xml序列化或JSON序列化数据。对于命令,您可以实现REST API或SOAP API。注意不要重新实现WCF;如果您需要WCF的所有功能,请使用它。