Здравствуйте, у меня есть простая служба 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
config, он, как представляется, выполняет каждый вызов веб-службы последовательно, при этом он принимает 2 минуты для всех 10 запросов вернуться!!
Теперь я понимаю, что это может быть из-за сеанса, но, по крайней мере, в службах ASMX мне удалось установить allowession на false. И на самом деле мой метод веб-службы вообще не использует сеанс. Поэтому вы можете задаться вопросом, зачем вообще использовать aspNetCompatibilityEnabled
. Потому что я хочу использовать олицетворение ASP.NET и проверку подлинности форм.
Я даже установил
[ServiceContract(SessionMode=SessionMode.NotAllowed)]
Итак, мой вопрос: это по дизайну и как я могу разрешить одновременные запросы веб-сервисов с включенной совместимостью ASP.net?