代码之家  ›  专栏  ›  技术社区  ›  Blorgbeard

我应该在IIS中托管我的WCF服务吗?

  •  15
  • Blorgbeard  · 技术社区  · 17 年前

    所以我正在设计一个WCF服务。我对WCF没有经验,我正在尝试决定它是应该在IIS中托管,还是应该在自定义的Windows服务中托管。或者其他选择?

    需要考虑的事项:

    • 它需要在启动时从数据库加载数据。
    • 它需要跨请求维护这些数据,而不是每次都加载它。
    • 它需要同时处理多个请求。
    • 它需要在端点方面尽可能地进行配置。
    • 它会经常调用本地DLL。

    我怀疑在IIS中托管它可以简化某些事情,但我不确定在这种情况下它是否是一个好主意。

    我的选择是什么?它们的利弊是什么?

    4 回复  |  直到 17 年前
        1
  •  16
  •   marc_s MisterSmith    17 年前

    您基本上需要看三个选项:

    1)在iis6(WindowsServer2003/2003 r2)中托管:在这种情况下,您只能托管HTTP协议,而不能托管其他协议。这本身就是一个很大的限制,您不能将nettcp用于内部网场景。

    2)iis7/was中的主机托管(vista,server 2008):这在支持的协议方面为您提供了更多的选择,而且主机托管环境一开始看起来像是一个胜利者。

    3)自托管:在这种情况下,完全取决于您如何做您需要做的事情来托管和运行您的服务。

    如果你暂时放弃选项1(如果你只有iis6可用,我会一直使用自托管),那么它就只剩下iis7而不是自托管了。

    iis7为您提供“按需激活”,例如,您的服务代码始终不在内存中,但在请求进入时将被加载和实例化。那是一个优点。

    另一方面,在iis7/was中托管会使您无法指定自己的端点-端点,因此服务地址是“myservice.svc”文件所在的虚拟目录-句点。您不能以任何方式、形状或形式更改。

    自我托管看起来可能需要很多工作,但它确实给了你最好的灵活性:你可以根据自己的喜好选择协议,你可以按照自己的喜好建立自己的寻址方案,并且你可以完全控制在什么时候完成。如果需要对主机服务做一些额外的工作,您可以引入自己的自定义服务主机,等等。

    除非你只是在玩一点WCF,否则我总是推荐并投票支持自托管-如果你需要让WCF服务一直运行,在Windows NT服务(这是生产环境的最佳解决方案)内,如果你正在开发/调试,你完全可以将WCF服务托管在控制台应用程序中,你可以n在您的闲暇时间启动和停止。

    因此,长话短说:最后,如果你真的想控制正在发生的事情,我总是推荐自我托管。

    这个 可以 一旦微软推出了新的“都柏林”服务器插件——可能是在2010年初.NET 4发布后的某个时候——就要改变它了——但这还为时过早。

    希望这有帮助。

    马克

        2
  •  6
  •   Eric Schoonover thSoft    17 年前

    我更喜欢自己托管的服务(Windows服务)。也就是说,无论走哪条路,都有正当理由。

    有一些 valuable articles in MSDN regarding different WCF hosting strategies .

    这里是一个 good summary of why you might choose to use IIS 作为您的服务主机。

        3
  •  3
  •   Spence    17 年前

    我想说,如果没有iis7,除了使用iis的基于HTTP的端点之外,您不能承载任何东西。因此,您很可能希望自我托管以获得灵活性。

    对于您的数据考虑,任何服务都可以使用状态进行编码,以便缓存数据等。

    多个请求将要求您使用WCF并发。要在服务主机上设置属性:

    [System.ServiceModel.ServiceBehavior(UseSynchronizationContext = false,
        InstanceContextMode = System.ServiceModel.InstanceContextMode.PerCall,
        ConcurrencyMode = System.ServiceModel.ConcurrencyMode.Multiple)]
    public class MyService : IMyService
    {
    }
    

    WCF是一只大野兽,我建议你看看JuvalLowy的书以及其他你能接触到的东西,你一天也学不到。

        4
  •  1
  •   Randy Levy    17 年前

    也许有点离题,但它确实涉及到了第四个方面。

    如果您最终选择了自托管,并且需要尽可能“针对端点进行配置”,那么您可能需要查看 Managed Services Engine .MSE是由Microsoft Services创建的开放源码产品,允许您虚拟化服务。基本上,它是一个wcf主机,使用自己存储库中的元数据公开服务。一些功能包括:支持服务的并行版本控制、启用/禁用服务上的操作的能力、将操作映射到端点的能力、将策略应用到操作的能力。

    我不确定它是否适合您的需要,但值得一看——特别是如果您需要非常可配置的话。

    推荐文章