gpt4 book ai didi

wcf - 如何在没有iis的情况下自行托管wcf

转载 作者:行者123 更新时间:2023-12-02 07:59:00 24 4
gpt4 key购买 nike

阅读 WCF 后,我们可以使用自托管选项,这里的一个限制是我们必须自己管理主机进程生命周期。我在这里探索的是在没有 IIS 的情况下运行服务并进行自托管。

脑子里想的东西很少- 请求管理人员将如何在这里工作。对于 IIS,它管理请求并将控制权交给特定线程上的 dotnet。在没有 IIS 的情况下,我们是否需要自己编写代码来管理传入请求(例如在 tcp 端口上),或者 WCF 提供一些类来管理请求并生成线程来处理每个线程。

  • 我知道,如果是自托管,则需要是 Windows 服务。在自托管的情况下,我如何利用服务器上同时请求的数量,可以通过限制线程池来管理它?或者我们可以通过 wcf 进行配置?

谢谢直流

最佳答案

自托管不需要 Windows 服务。如果您愿意,您可以在控制台应用程序中自行托管。只是如果您需要 24/7 访问但出于某种原因不想使用 IIS,Windows 服务是一个很好的自托管解决方案。

管理主机进程的生命周期并不是什么大事。我使用 Windows 服务来托管 WCF 服务。我只需在 Windows 服务的 OnStart() 回调中启动 WCF 服务,如下所示:

private ServiceHost _host;
protected override void OnStart(string[] args)
{
_host = new ServiceHost(typeof(CalculatorService));
_host.Open();
}

同样,我在 Windows 服务的 OnStop() 回调中关闭了 WCF 服务:

protected override void OnStop()
{
if (_host != null) _host.Close();
}

这有效地将 WCF 服务的生命周期与 Windows 服务的生命周期联系起来。您可以在任何类型的应用程序中执行类似的操作 - 控制台、Windows 窗体应用程序等。例如,在 Windows 窗体应用程序的 OnLoad() 回调中,启动 ServiceHost 为您的 WCF 服务并在退出应用程序时将其关闭。足够简单。

WCF 为您提供了处理传入请求的很大灵活性。例如,您可以将 WCF 服务设为单例,这意味着您将拥有且仅有一个 WCF 服务实例。在这种情况下,所有传入请求都由这一实例处理。但您也可以让 WCF 服务使用 WCF 服务的新实例来处理每个传入请求。这允许您的服务更好地扩展,但可能需要您同步对后端数据存储(例如数据库)的任何访问。您可以使用 InstanceContextMode 控制此行为ServiceBehaviorAttribute的属性(property)在您的 WCF 服务上。

当我再次阅读您的问题时,听起来您刚刚在学习 WCF,所以我希望这些都不会令您不知所措。看看我对this SO question的回答一些您可能会觉得有帮助的链接。

关于wcf - 如何在没有iis的情况下自行托管wcf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2525204/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com