为什么要在Windows服务中承载wcf服务?

为什么要在Windows服务中承载wcf服务?,wcf,Wcf,您希望在windows服务中而不是在IIS中托管wcf服务的原因是什么?一个原因是IIS6仅支持基于HTTP的绑定。如果您想使用TCP、MSMQ等,则需要在单独的程序中托管 自由。作为开发人员,您不需要有人来管理这个盒子 有时候IIS6真的是太过分了 您正在将其用作进程间通信管道 您希望在代码中声明所有绑定。这远没有流行的xml配置文件那么混乱,也更强大。我无法想象有多少场景我会希望非程序员搞乱绑定。xml方法适用于需要高度动态的原型和系统,但总的来说,我认为这不是一个好主意 在IIS中托管时

您希望在windows服务中而不是在IIS中托管wcf服务的原因是什么?

一个原因是IIS6仅支持基于HTTP的绑定。如果您想使用TCP、MSMQ等,则需要在单独的程序中托管

  • 自由。作为开发人员,您不需要有人来管理这个盒子
  • 有时候IIS6真的是太过分了
  • 您正在将其用作进程间通信管道
  • 您希望在代码中声明所有绑定。这远没有流行的xml配置文件那么混乱,也更强大。我无法想象有多少场景我会希望非程序员搞乱绑定。xml方法适用于需要高度动态的原型和系统,但总的来说,我认为这不是一个好主意
    • 在IIS中托管时,每个网站中每个基址只允许绑定到一个端口(这意味着您不能使用不同端口指定两个绑定,因为您只能使用一个端口,或者使用不同端口的端点)
    • 在IIS中只能使用单个基址,唯一的解决方法是在不同的网站上部署同一项目的多个版本(恶心)
    • IIS进程最终必须循环,当它这样做时,它会转储所有内容并重新启动,这在很大程度上是好的,因为内存已被释放,捕获的资源已被释放,但在使用单例时,这可能会产生不足的效果,具体取决于您的代码
    [编辑]:更多点

    • 在标准设置中,工作进程始终有2GB虚拟内存可用(无论机器中有1、2或4GB物理内存)

    @Steve:XML配置文件在程序员需要修复生产中的绑定时是一个非常好的主意。这样就没有必要部署新版本的二进制文件了。@John:我的主要反对意见是它模糊了问题域。配置问题应由IIS管理员处理,代码问题应由程序员处理。当您有一个定义绑定的文件时,管理员认为它就像它的域一样,而最明显的情况是它不是。另外,在3.5版本的框架中,有几个设置很难用xml定义,我必须用代码来定义。不确定这是否会在4.0中得到改善