【发布时间】:2011-01-23 15:22:45
【问题描述】:
最近我在 WCF 方面做了很多工作,特别是在 IIS 中托管(不是自托管)。
只是我,还是有人在微调超时值时遇到问题。我将首先提到您需要立即进行微调的大量超时。
查看以下以某种方式与超时相关的绑定端点值:
- closeTimeout="00:01:00"
- openTimeout="00:01:00"
- receiveTimeout="00:10:00"
- sendTimeout="00:01:00"
- maxBufferSize="999"
- maxBufferPoolSize="524288"
- maxReceivedMessageSize="999"
- readerQuotas maxDepth="32"
- readerQuotas maxStringContentLength="8192"
- readerQuotas maxArrayLength="16384"
- readerQuotas maxBytesPerRead="4096"
- readerQuotas maxNameTableCharCount="16384"
这些只是客户端端点配置值,我们还没有开始,现在要让服务在 IIS 中运行,还需要设置服务器端绑定,它提供与客户端。
完成后,配置 IIS 也很重要,否则在长时间调用 WCF 服务期间,您最终会导致主线程被中止。
IIS 需要禁用 keep-alives,App Pool 还带有大量超时值,App Pool,这本身就是一个详细的主题。除此之外,还有大约另外 7 个超时值需要特别微调,否则可能会导致复杂的 WCF 调用失败。
对不起,有没有人闻到老鼠的味道?
我的理解是,基本上(大部分)这些超时值是由于信任问题而存在的。所谓信任,我的意思是“我们不相信服务会在合理的时间内完成他们应该做的事情”。 SOA 可靠通信的每一个方面都是不可信的,因此,我们似乎需要大量的捕获网(超时值)来确保一定程度的可管理性。让我们面对现实吧,如果我们信任系统能够及时做出响应,为什么需要设置超时值?
坦率地说,我遇到的所有问题都是从头到尾,如果我在我的应用程序中拥有的 5 个系统通常是可信任的,并且通常会及时做出响应。我很沮丧,因为 OOB、WCF/IIS 托管失败,我仍然需要经历定义这些边界的漫长过程。
我观察到 WCF 技术是虚伪的,在网络广播和营销演示期间,通常总是提到 WCF 允许更好地抽象实现,允许开发人员更轻松地编写和部署,并且通过“简单”定义端点是能够专注于业务逻辑,而较少关注底层架构。我在实践中发现没有什么比事实更离谱的了。使用 WCF,您需要深入了解服务如何运行的细节,并且您需要手动进行大量微调,这与 ASMX 服务不同,在 ASMX 服务中,它们通常无需大惊小怪地部署,并且只需要一些 IIS 微调,甚至很少。
所以我提出的问题是:只有我还是你们中的任何人有同样的挫败感和观察?欢迎所有cmets!
【问题讨论】:
-
你知道 - 对于那个标记问题的人来说,显然 MS 并不认为这是一个坏主意,因此为什么在 v4 中解决了我的挫败感......
-
IIS 托管对我来说总是超时。我正在认真考虑将我的所有服务转移到自托管......