有关托管WCF服务的任何建议吗?

时间:2011-01-20 03:00:53

标签: wcf

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

4 个答案:

答案 0 :(得分:4)

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

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

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

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

  • 在致电ServiceHost(Windows消息循环开始)之前创建并打开Application.Run实例
  • 在单独的线程中创建并打开ServiceHost实例
  • 在服务实施中使用[ServiceBehavior(UseSynchronizationContext = false)]

答案 1 :(得分:1)

不,您不必在单独的AppDomain中托管它。只是主持它。在这方面,WinForms并没有什么特别之处。

答案 2 :(得分:0)

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

如果您希望加载和卸载与您的服务相关的资源(例如程序集)而不关闭您的应用程序,单独的应用程序域将使这更容易,但否则我没有看到太多理由使事情复杂化

只是我的2c。 : - )

答案 3 :(得分:0)

您可以以Win形式托管,但必须始终保持运行状态。

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