【问题标题】:IIS Proxy for a Windows Service hosted WCF Service用于托管 WCF 服务的 Windows 服务的 IIS 代理
【发布时间】:2010-08-24 21:19:34
【问题描述】:

我有一个通过 net.tcp 通道公开 WCF 服务的 Windows 服务。

现在我希望通过 IIS 公开此服务,而不是托管在其中。通过这样做,我将能够维护 Windows 服务中的状态,并且我将受益于底层 IIS 身份验证和安全性。

是否可以通过使用一些配置来做到这一点?也许是一种代理或直通?

更新

我为什么要这样做?一个好问题:

  • 一些进程以预定的时间间隔异步运行。

  • IIS 正在回收 AppPools 并触发它,通常应该发出一个 Web 请求,以便启动 AppPool。

  • 我无法将服务直接公开为 Windows 服务中的 Web 服务,因为 IIS 已安装并绑定到我要使用的 IP 地址。

  • 如果我想为许多客户公开服务,使用他们自己的 TLD,我不想在每个网站上运行相同的进程(可能是为了排他锁,或者只是为了内存/CPU 使用)

也许这说明了一点需要...

【问题讨论】:

  • 我以前从未见过这种安排。你能描述一下你这样做的好处吗?我只考虑过将它托管在服务中或托管在 IIS 中。我以前从未考虑过混合方法。
  • 我已经更新了问题...

标签: c# wcf iis proxy


【解决方案1】:

不,您必须在 IIS 中实现全新的层。您将公开新的 WCF 服务,该服务将调用托管在 Windows 服务中的 WCF 服务。真的需要吗?为什么不直接在 IIS 中托管服务,或者为什么不在 Windows 服务上公开 HTTP 端点?您在 Windows 服务中保持什么状态?

【讨论】:

  • 我无法直接公开 Web 服务,因为 IIS 使用了 IP 地址/端口组合。此外,还有一些任务应该在一天中的特定时间运行,此时 IIS 可能会被回收或无法启动(因为 AppPool 是由 Web 请求触发的)。
  • 你使用那台服务器上的 IIS 吗?最简单的方法是释放 IIS 上的端口(关闭阻止端口的站点)并在 Windows 服务中使用它。但是,如果您将 IIS 用于其他应用程序,这是不可能的。还可以考虑使用另一个端口进行来自 Windows 服务的 HTTP 通信。否则,您将不得不按照我在回答中的建议进行操作。
  • 是的,使用了IIS,防火墙阻塞了其他端口……如果没有更好的解决方案,我就按照你说的做一个一对一的层。
  • 如果 Windows 服务与 IIS 位于同一台服务器上,请考虑使用 NetNamedPipeBinding 在它们之间进行通信。只能用于同一台机器上的通信,性能优于Net.Tcp。
猜你喜欢
  • 1970-01-01
  • 2022-12-13
  • 1970-01-01
  • 2011-10-09
  • 1970-01-01
  • 2013-08-06
  • 2012-04-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多