0

我有一个从联网计算机收集文件并将它们存储到本地目录的程序。这是每小时完成一次,我希望把它变成一个将在后台运行的服务,但是有一个小应用程序正在运行,它会制作一个系统托盘图标,这个图标将允许用户打开一个 GUI,他们可以在其中修改位置将文件保存到和从中检索文件的位置,以及为用户定义的日期时间范围手动收集文件。我很好奇 GUI 是否只是一个前端,并且所有“繁重”的方法都在服务中完成,我如何从 GUI 访问这些服务功能?例如,如果以下是我的服务(非常粗糙的版本):

partial class RemoteArchiveService : ServiceBase
{
   ...
   ...
   string destination;
   string retrieveFrom;
   List<string> fileNames;
   public void ChangeCollectFrom(string filepath){...}
   public void ChangeDestinationFolder(string filepath){...}
   public void GetFilesAsynchronously(){...}
   ...
   ...
}

在 GUI 代码中,如何使用新的用户输入字符串访问函数 ChangeCollectionFrom()?

4

2 回答 2

2

查看 WCF 并使您的 GUI 成为调用服务的客户端。一个好的起点是http://msdn.microsoft.com/en-us/library/ms733069.aspx

WCF 将允许您通过在现有 Windows 服务中托管 WCF 服务来简洁明了地指定客户端需要访问的方法。例如,您可以执行以下操作:

[ServiceContract(Namespace = "http://Somewhere.StackOverflow.Samples")]
public interface IRemoteArchive
{
    [OperationContract]
    void ChangeCollectionFrom(string filepath);
}

partial class RemoteArchiveWCFService : IRemoteArchive
{
    public void ChangeCollectionFrom(string filepath)
    {
        // ...    
    }
}

然后在您的 RemoteArchiveService 的其他地方(摘自上面的链接的片段)

partial class RemoteArchiveService : ServiceBase
{
    // ...
    protected override void OnStart(string[] args)
    {
        if (serviceHost != null)
        {
            serviceHost.Close();
        }

        serviceHost = new ServiceHost(typeof(RemoteArchiveWCFService));

        // Open the ServiceHostBase to create listeners and start 
        // listening for messages.
        serviceHost.Open();
    }
    // ...
}
于 2013-08-07T20:08:22.240 回答
0

Nowadays, most of services expose a Web UI for configuration and administration like Oracle, Network-enabled printers, etc., so I recommend you take advantage of Web UI for your purpose and the happy news is that it's not very difficult.

Nancy is a lightweight, low-ceremony, framework for building HTTP based services on .Net and Mono which can help you in this way.

In addition, Build Simple Web UIs with the Nancy Framework is a great article that exactly describes what you want.

于 2013-08-07T21:22:01.020 回答