Vb.net 托管在Windows服务中的WCF服务-哪些服务应该完成所有工作?

Vb.net 托管在Windows服务中的WCF服务-哪些服务应该完成所有工作?,vb.net,wcf,Vb.net,Wcf,我正在编写我的第一个WCF服务,但我有点不确定该服务的主要功能应该在哪里实现 我的服务的主要目的是按计划执行任务,并最终将其状态记录回远程服务器。WCF服务的思想是允许系统托盘应用程序和服务之间的通信。我的问题是我应该在哪里实现任务调度和数据库日志记录 应: A) Windows服务只托管WCF服务,不做其他事情,让WCF服务完成所有工作和通信 B) Windows服务托管WCF服务并完成所有工作,让WCF服务进行通信而不做其他事情 在B的情况下,Windows服务如何向WCF服务获取数据和从W

我正在编写我的第一个WCF服务,但我有点不确定该服务的主要功能应该在哪里实现

我的服务的主要目的是按计划执行任务,并最终将其状态记录回远程服务器。WCF服务的思想是允许系统托盘应用程序和服务之间的通信。我的问题是我应该在哪里实现任务调度和数据库日志记录

应: A) Windows服务只托管WCF服务,不做其他事情,让WCF服务完成所有工作和通信

B) Windows服务托管WCF服务并完成所有工作,让WCF服务进行通信而不做其他事情

在B的情况下,Windows服务如何向WCF服务获取数据和从WCF服务获取数据?ServiceHost似乎不提供对WCF服务方法的访问。因此,我是否需要创建一个新的客户端实例,并以与在系统托盘应用程序中相同的方式连接到WCF服务?是否可能同时有多个连接?(我正在使用net.tcp,主要是因为我遵循的教程正在使用它。)还有一种可能性,我可能希望服务器应用程序稍后连接到客户端的WCF服务。

服务不像程序那样具有“主功能”-它提供服务合同(接口)包含可由服务客户端调用的操作。WCF允许将该契约公开给可能在不同进程或不同机器上运行的调用方

一旦您有了一个WCF服务实现,您就可以用许多不同的方式来承载它。一种方法是在Windows服务进程内。为此,您通常会创建一个
System.ServiceModel.ServiceHost
,其中包含您的服务类型(或实例)和
Open()

除了初始创建之外,Windows服务不会与WCF服务实例通信-服务主机将处理到地址和绑定指定的端点的任何调用,并将它们分派到您的服务实例

所以,你的“A”选项最接近你想要的

您的托盘应用程序将是服务客户端,并将通过向服务(其ServiceHost将侦听消息)发送消息来调用操作

要同时处理多个操作,您需要熟悉


注意,在您的场景中,如果您不希望从另一台机器调用服务,您可能想考虑一个不是TCP绑定。

同意,我认为选项A听起来是最好的,因为最终Windows服务可能是您想要为终端用户包装您的体验的,但它可能不在将来。(与WCF服务相比,WCF服务是一个更通用的包装器)。这样想。如果你想添加(比如说)linux支持或适应windows操作系统的变化,那么你会很高兴最小化对windows的依赖。对WCF的依赖是两个弊病中较小的一个。我怀疑这至少会持续几十年(作为一种哲学)。谢谢。我知道在控制台应用程序中没有“主”功能/入口点。但根据选项a,正如你们建议的,我的计划是使用“Public Sub New”启动计时器,该计时器将等待预定时间并触发自定义功能以执行所需任务。您认为这是可行吗?我目前还不确定,但我可能会在某个时候从远程计算机调用函数,以允许服务器更新计划时间。但除此之外,我将查看命名管道,谢谢。我肯定会查看并发模式。