gpt4 book ai didi

asp.net - AspNetCompatibilityRequirements 导致 WCF Web 服务阻止

转载 作者:行者123 更新时间:2023-12-02 04:50:43 26 4
gpt4 key购买 nike

您好,我有一个像这样的简单 wcf 服务,其测试方法只是休眠 20 秒并返回一个值。我编写了一个测试页面,它使用 jquery 连续调用它 10 次,它似乎是并发执行的,客户端等待 20 秒,然后大约在同一时间从所有服务返回结果。

 [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall,ConcurrencyMode=ConcurrencyMode.Multiple,UseSynchronizationContext=false)]
public class AjaxTestWCFService : IAjaxTestWCFService

但是如果我设置

aspNetCompatibilityEnabled="true"

在 web.config 中,无论我做什么,都使用 concurrencymode, usesynchronizationcontext或实例上下文模式,甚至 serviceThrottling配置中,它似乎按顺序执行每个 Web 服务调用,所有 10 个请求返回需要 2 分钟!!

现在我意识到这可能是由于 session 所致,但至少在 ASMX 服务中我能够将 EnableSession 设置为 false。事实上我的网络服务方法根本不使用 session 。所以你可能想知道,为什么使用 aspNetCompatibilityEnabled根本不。因为我想使用 ASP.net 模拟和表单例份验证。

我什至设置了

[ServiceContract(SessionMode=SessionMode.NotAllowed)]

所以我的问题是,这是设计使然吗?如何在启用 ASP.net 兼容性的情况下启用并发 Web 服务请求?

最佳答案

这是 ASP.NET 本身的设计 - 检查 concurrent requests and session state 。一旦打开 AspNetCompatibilityEnabled,您总是必须处理这个问题 - 我没有尝试过,但我希望唯一的选择是关闭配置文件中的 session 。

<configuration>
<system.web>
<sessionState mode="Off" />
</system.web>
</configuration>

但是您的测试可能仍然不太现实。当 AspNetCompatibilityEnabled 关闭时,它将在本地并行执行,但我希望如果您从不同的计算机运行页面,您将无法并行执行两个以上的请求。原因是默认使用HTTP持久连接。根据 HTTP 规范,同一服务器只能打开 2 个 HTTP 持久连接 = 只能执行两个并行请求 ( last paragraph before chapter 8.2 )。 Windows 遵循这些建议。

编辑:

这个thread on MSDN forum讨论同样的问题。它还提供了一些解决方案。

关于asp.net - AspNetCompatibilityRequirements 导致 WCF Web 服务阻止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5019798/

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