如何从应用程序访问Windows服务的属性

时间:2014-07-30 06:37:20

标签: c# asp.net windows-services

我有一个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放入我的应用程序中。我怎么能这样做。

2 个答案:

答案 0 :(得分:4)

ServiceController.ExecuteCommand无法做到这一点。它只是一种方式,无论如何它的目的都不是那样。

您可以通过在Windows服务(WCF自托管,WebApi OWIN自托管)或远程处理中托管Web服务来实现。需要公开的所有Web服务都是一种不返回数据表而是返回对象列表的方法。因此,您需要将DataTable转换为IEnumerable<DataObject>,其中DataObject是您的服务合同。

你可以为初学者调查这些:

  1. WebApi 2 Self Hosted Web Services
  2. How to host a WCF Service in a managed application

答案 1 :(得分:2)

要与Windows服务通信,服务需要提供端点。

该服务可以打开套接字并开始侦听传入的消息/请求。作为响应,服务可以序列化数据表(或任何其他对象)并将其传回。

请参阅:Socket Server in Windows Service

对于协议:您可以使用标准Xml序列化或JSON序列化数据。对于命令,您可以实现REST API或SOAP API。注意不要重新实现WCF;如果您需要WCF的所有功能,请使用它。

相关问题