![]() |
1
2
从哪里开始? 您必须记住,WCF服务的架构独立于宿主应用程序。您可以根据您的方案和需要,在命令行应用程序、WinForms应用程序、Windows服务、IIS、Silverlight、Win32应用程序、MFC应用程序等中托管WCF服务。 因此,WCF基础设施和托管应用程序基础设施需要独立控制和配置。 在您的情况下,您选择在IIS中托管WCF服务。对于很多场景来说,这是一个不错的选择,但在其他场景中则是一个糟糕的选择。为什么?因为 IIS是专门为一个非常有针对性的场景而构建的:接收和分派对短期工作进程的请求,并将响应返回给调用者。 这个“短命”语句是经过深思熟虑的:IIS主要用作web服务器。因此,默认情况下配置为充当web服务器。Web服务器通常配置为尽快响应调用者。除非工作进程返回响应,否则web服务器不知道由页面请求生成的工作进程是“忙”还是“挂起”。在收到响应之前,web服务器只能假设工作进程“正忙”。如果工作进程在给定的(可配置的)时间段内没有响应,那么web服务器将决定终止该工作进程,因为它可能已挂起。 因此,在您的场景中,您使用IIS托管一个具有特殊要求(即执行长时间运行操作的能力)的非典型应用程序。如果应用程序开发人员/管理员知道某些应用程序返回的时间可能不超过10分钟,则可以拨入承载特殊情况应用程序的工作进程的超时时间。这是件好事。如果你没有被赋予这种能力,当你的代码中的一个bug或者数据库层的一个慢下来导致整个web服务器瘫痪时,你会尖叫,因为你的工作进程都没有超时,所以杀死了由该机器托管的每个web站点。 同样的逻辑也适用于WCF配置设置: 您注意到的所有设置都允许您通过修改WCF服务的配置设置来控制其性能特征,而无需更改代码行和/或部署新的位(假设您通过配置文件配置服务,而不是通过代码控制这些设置)。 如果如您所示,您拥有执行长时间运行任务的WCF服务,则可以选择不在IIS中承载这些服务,而在Windows服务应用程序中承载它们。在这种情况下,你的托管应用程序除了托管你的服务外几乎没有其他作用,而是对启动和关闭通知做出适当的响应。那么,您如何控制您的服务处理具有非常大有效负载的消息的能力呢?如何控制要同时创建的服务实例的数量?如何控制WCF等待新服务实例打开和/或关闭的时间? 很高兴你有机会改变这些设置和一些其他设置,并很容易地控制服务的性能、安全性、可靠性和行为。更糟糕的是,您可能完全无法控制您的服务或它们的主机,必须使用您所提供的任何性能特征。 |
![]() |
Emopusta · 从后端到前端的图像路径不工作 2 年前 |
![]() |
Asdrubal Hernandez · Linq查询特定数组索引出错 2 年前 |
![]() |
Niyazi Babayev · 如何在表达式中动态应用表达式? 3 年前 |
|
Dansih · .Net核心自定义身份验证方案 3 年前 |
![]() |
lolorekkk · 面板插入。NET WinForm 3 年前 |