【问题标题】:WCF Service And Windows ServiceWCF 服务和 Windows 服务
【发布时间】:2012-08-20 21:31:21
【问题描述】:

我有一个用作远程文件/文件夹浏览器的 WCF 服务。我们还计划提供一个 Windows 服务,该服务将用作 3 个功能。

  1. Windows 服务将启动 WCF 服务,以便它可以完成其工作(同一项目的一部分)
  2. Windows 服务会每隔几分钟根据计时器+许多其他类似方法将一些数据上传到 SQL 服务器
  3. WCF 将通过 WCF 接收 asp.net 客户端请求的运行方法的请求,然后要求 windows 服务运行方法并将结果返回给 WCF,并将结果传回给 ASP.net。李>

第 3 项是问题所在。 Windows 服务应该如何与在同一台机器上运行并且本质上是同一个应用程序运行的 WCF 服务(和 Vice-Versa)服务进行通信。又过了 WCF 了吗?

可能我做错了。希望有人可以提供帮助

谢谢 达摩

【问题讨论】:

  • 我已经写了一篇文章如何做到这一点。有关详细信息,请参阅this link
  • 嗨 Oleski,您的示例显示了我的前 2 个要点,但没有显示第 3 个要点。服务如何调用 DoAction1。如果服务有自己的方法 DoAction3 那么 WCF 怎么调用它呢?达摩
  • Damo,您需要做的是向 WCF 服务添加另一个方法,例如 DoAction1_AndCallWindowsService,它只会从 Windows 服务调用 DoAction3。 (如果我理解正确的话)。将这两个任务分开。首先有一个方法来调用你在 Windows 服务中需要的东西。其次,从 WCF 服务调用该方法。

标签: c# asp.net wcf service


【解决方案1】:

WCF 服务可以托管在 Windows 服务中。见http://msdn.microsoft.com/en-us/library/ms750530.aspx。他们给出的具体示例是针对控制台应用程序的,但同样的概念也适用。

自托管时,您可以指定在客户端连接到服务时实例化的类型,或者传递客户端在访问服务时将使用的实例。在任何一种情况下,您都可以实例化相同的类或访问传递给 ServiceHost 的实例以调用服务上的方法,尽管它们不会通过 WCF 管道。 WCF 服务类可以获得对 Windows 服务类的引用并访问其上的方法,以允许发生回调而无需再次通过 WCF 堆栈。

或者,如果您不希望自托管或您的应用程序在服务中使用 WCF 特定调用,您可以像在桌面应用程序上一样在服务中创建 wcf 客户端。只需像往常一样添加服务引用并使用回调跳回 Windows 服务代码。

【讨论】:

    【解决方案2】:

    第一个答案是正确的。 我建议还考虑以下事项:如果您没有 Windows 服务来托管该 wcf 服务,那么继续在那里公开新的服务。还有其他选项,但这些选项正在降低,因此 WCF 是最简单和最安全的选项。同时 - 它非常优雅的解决方案。

    【讨论】:

    • 你想说什么?我读了 3 遍,但还是没明白你的意思……
    • 我的观点是,如果您拥有的 WCF 服务与 Windows 服务无关 - 因此您不能在另一个中托管一个,那么您可以引入托管在 Windows 服务中的新 WCF 服务,并公开 Windows通过新引入的服务提供服务能力。那么通信问题就到了WCF之间的通信上,就是在初始的WCF服务中添加服务引用那么简单。
    猜你喜欢
    • 2011-07-25
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多