是否有任何关于托管WCF服务的建议?

是否有任何关于托管WCF服务的建议?,wcf,Wcf,拥有winform应用程序并希望在其中承载WCF服务。我需要在单独的appdomain中托管它吗?有什么建议吗?没有,您不必将其托管在单独的AppDomain中。主办吧。WinForms在这方面没有什么特别之处。你的应用程序做什么?该服务是应用程序常规功能的一部分还是完全独立的逻辑实体 如果您想在不关闭应用程序的情况下加载和卸载与您的服务相关的资源(如程序集),那么单独的应用程序域将使这变得更容易,但除此之外,我看不出有什么理由使事情复杂化 就我的2c.:-) 你可以以赢的形式主持比赛,但你必须

拥有winform应用程序并希望在其中承载WCF服务。我需要在单独的appdomain中托管它吗?有什么建议吗?

没有,您不必将其托管在单独的AppDomain中。主办吧。WinForms在这方面没有什么特别之处。

你的应用程序做什么?该服务是应用程序常规功能的一部分还是完全独立的逻辑实体

如果您想在不关闭应用程序的情况下加载和卸载与您的服务相关的资源(如程序集),那么单独的应用程序域将使这变得更容易,但除此之外,我看不出有什么理由使事情复杂化


就我的2c.:-)

你可以以赢的形式主持比赛,但你必须始终保持这种状态


还建议您在IIS中托管,以便任何类型的客户端都能使用您的服务

您不需要将其托管在单独的域中,但必须决定是希望服务请求由UI线程处理还是由不同的线程处理。它取决于创建
ServiceHost
实例的方式,或者取决于应用于服务类的
servicebeavior

当服务托管在UI线程中时,它可以直接与UI交互,但请求处理是消息循环的一部分,所有服务请求都由单个线程(顺序)处理。处理请求时,无法处理任何其他windows事件(包括UI事件)=应用程序冻结

当服务托管在不同的线程中时,它的行为与任何其他托管环境中的行为相同,但它不能直接与UI交互-您必须使用委托调用

强制服务在自己的线程中运行的方法:

  • 在调用
    应用程序之前,创建并打开
    ServiceHost
    实例。运行
    (Windows消息循环的开始)
  • 在单独的线程中创建并打开
    ServiceHost
    实例
  • 在服务实现中使用
    [ServiceBehavior(UseSynchronizationContext=false)]

我很想知道您为什么要在windows窗体应用程序中托管服务。在一个星期内,在两个地方都举办不是更好吗。Windows服务b。而是IIS(如果这是一个选项)?如果您将其托管在Winforms应用程序中,则它仅可用/实时,然后您的Winforms应用程序启动并运行。如果您需要WCF服务的“全天候”可用性,请将其放入Windows NT服务中。