【问题标题】:Does someone have an example of why I would self-host a WCF service有人举个例子说明我为什么要自托管 WCF 服务
【发布时间】:2010-05-24 18:25:45
【问题描述】:

我想我的大脑已经忙于 IIS 和 Web 应用程序,以至于我想不出一个理由来解决使用自托管 WCF 服务的麻烦。我一直都可以使用 IIS,因此创建自托管 WCF 服务似乎比我想做的工作要多。我为什么要这样做?

【问题讨论】:

    标签: .net asp.net wcf


    【解决方案1】:

    很多点:

    • 不需要 IIS - 这在某些服务器上可能是一个很好的优势
    • 您可以完全定义服务地址 - 使用 IIS,它们由服务器名称、虚拟目录名称以及 SVC 文件的名称和扩展名(例如 http://server/virtualdir/yourservice.svc,而自托管您可以使用http://Server:7171/Services/MegaService 或任何你喜欢的)
    • 不会遇到与应用程序池回收相关的问题(通过为 WCF 服务使用单独的专用应用程序池可以显着减少这种情况)
    • 能够停止和启动 NT 服务,例如让这些服务离线一段时间(我相信使用 IIS 不太容易做到)
    • 更多地控制ServiceHost的创建和选项
    • 支持所有开箱即用的协议 - netTcpBinding 等需要在 IIS7 上执行额外的步骤(可能会被遗忘),而在 IIS6 上是不可能的

    【讨论】:

    • 感谢您的信息,这很有帮助,解释了很多。
    【解决方案2】:

    这完全取决于您想如何使用 WCF。您希望作为服务公开的逻辑并不总是需要/可以托管在 IIS 中。例如:

    • 您正在使用 WCF 在本地网络上的多个客户端应用实例之间构建 P2P 通道。
    • 您正在构建部署在客户端 SKU 上的本地 WCF 服务,默认情况下未安装 IIS
    • 您希望完全控制您的端点地址
    • 您想使用 net.tcp 或 net.pipe 通道
    • 您希望完全控制服务的生命周期和实例模型
    • 您希望服务以交互式用户的身份运行(模拟并不总是答案)

    【讨论】:

      【解决方案3】:

      例如,让我们考虑在 Windows 服务中托管的优势:

      • 受控进程生命周期
      • 应用范围
      • 在所有版本的 Windows 上均受支持
      • 您不仅限于 HTTP,如果 您使用的是 Windows 2003 及以下版本 (没有 WAS)

      你也可以考虑

      • 易于调试:调试 WCF 托管在 自托管环境提供了一个 熟悉的调试方式,无需 必须附加分开 激活您的应用程序 服务。
      • 易于部署:一般来说, 部署简单的 Windows 应用程序 就像 xcopy 一样简单。你不需要 任何复杂的部署方案 服务器场等,部署 一个简单的 Windows 应用程序 用作 WCF ServiceHost。

      【讨论】:

      • 我没有考虑调试和部署。这是使用它的一个很好的理由。感谢您的回答。
      【解决方案4】:

      如果您运行的是 64 位 Windows,则无法自动编译和运行 WCF 服务,您必须自行托管。

      我在这里询问了一种特殊情况: Ways to access a 32bit DLL from a 64bit exe

      我有一个需要使用 32 位 DLL 的 64 位应用程序。所以我想我只是将 32 位 DLL 包装在 32 位 WCF 服务中。不去。我无法强制服务运行 32 位。必须自己托管。

      【讨论】:

        【解决方案5】:

        一个示例用例是客户端应用程序。您可以在客户端应用程序中自托管 WCF 服务,以便客户端可以接收来自后端系统的通知。

        【讨论】:

          【解决方案6】:

          高负载服务 net.tcp 或 net.pipe 绑定根本不适用于 IIS。 它仅适用于 IIS 7 + 额外的 3 种服务:WAS、Net.* 侦听适配器和端口共享(如果您不使用共享,则为事件)。这是非常复杂的解决方案。你必须配置port sharing,但是有一天它会因为套接字或管道错误而崩溃。 SelfHost 不会。

          IIS 不适用于流式传输。 您不会“直接使用网络流”工作。您将使用内存缓冲区或临时文件,因此您不会从流式传输中受益。

          附:这都是关于 WCF 3.5 和 IIS 7.5 的。我希望下一个版本会更好。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-09-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多