如何在没有iis的情况下自我托管wcf
阅读WCF我们有自己的托管选项,我们必须自己管理主机进程生命周期。我在这里探索的是在没有IIS的情况下运行该服务并进行自我托管。如何在没有iis的情况下自我托管wcf
想到很少的东西 - 请求管理如何在此工作。在IIS的情况下,它管理请求并在特定线程上对dotnet进行控制。在没有IIS的情况下,我们需要自己编写代码来管理传入的请求(比如在一个tcp端口上),或者WCF提供一些类来管理请求并生成线程来处理每个线程。
- 我知道,在自我托管的情况下,这需要是一个Windows服务。在自我托管的情况下,我怎样才能在服务器上同时请求数量,它可以通过限制线程池来管理?或者我们可以通过wcf配置这个?
感谢 DC
自托管不要求一个Windows服务。如果您愿意,您可以在控制台应用程序内自行托管。只是如果您需要全天候访问,但不希望出于任何原因使用IIS,则Windows服务是自托管的一个很好的解决方案。
管理主机进程的生命周期并不是什么大事。我使用Windows服务来托管WCF服务。我只是在OnStart()
回调我的Windows服务的启动我的WCF服务,像这样:
private ServiceHost _host;
protected override void OnStart(string[] args)
{
_host = new ServiceHost(typeof(CalculatorService));
_host.Open();
}
同样,我关闭了OnStop()
回调我的Windows服务的WCF服务:
protected override void OnStop()
{
if (_host != null) _host.Close();
}
这有效将WCF服务的生命周期与Windows服务的生命周期绑定在一起。您可以在任何类型的应用程序(控制台,Windows窗体应用程序等)中执行类似操作。例如,在Windows Forms应用程序的OnLoad()
回调中,启动ServiceHost
作为WCF服务,并在退出应用程序时关闭它。够简单。
WCF为如何处理传入请求提供了很大的灵活性。例如,您可以使您的WCF服务成为单例,这意味着您将拥有一个且只有一个WCF服务实例。在这种情况下,所有传入的请求都由这一个实例处理。但是你也可以让你的WCF服务用你的WCF服务的一个新实例来处理每个传入的请求。这可以让您的服务更好地扩展,但可能需要您同步对后端数据存储的任何访问权限,例如数据库。您可以使用WCF服务上的ServiceBehaviorAttribute
的InstanceContextMode
属性来控制此行为。
当我再次阅读你的问题时,听起来你只是在学习WCF,所以我希望这些都不会让你不知所措。查看我对this SO question的回答,查看可能对您有帮助的一些链接。
为了回答您的具体问题,WCF托管基础设施将旋转了一个HTTP侦听与HTTP.SYS(同样的事情IIS使用),将交通监听的具体工作您配置的端口/地址。
对于任何其他问题,我相信this section in MSDN将回答他们。