Если вы делаете вызов в приложение ASP.Net и используете сеансовые куки-файлы, то все вызовы в приложение сериализуются (кроме тех, где страница явно отключается от сеанса).состояние).
Обычно это не является большой проблемой, потому что клиентский браузер обычно обращается к странице ASP.Net плюс куча ресурсов (изображения, js, css и т. д.), и эти последние не сопоставлены с ASP.Net , поэтому IIS обслуживает их изначально.Но если вы попытаетесь открыть две страницы ASP.Net одновременно (например, в наборе фреймов), вы увидите, что они загружаются одна за другой.
Теперь я не знаю , чтоэто происходит с WCF, но исходя из того, что вы говорите, если вы увидите такое поведение для одной службы, я ожидаю увидеть это для всех из них, поскольку сеанс для каждого пользователя, а не для службы.
В ASP.Net вы можете «отказаться» от состояния сеанса постранично.Если это возможно для размещенной службы WCF и жизнеспособно для вашего сценария (чтобы сделать службы не сохраняющими состояние), это могло бы облегчить проблему.Или переместите одну или несколько служб в другое приложение ASP.Net (другой сеанс)
Помните, что здесь вы можете увидеть другие проблемы, связанные с моделями создания и повторного входа в службу.Ваша проблема, как описано выше, является проблемой параллелизма для каждого пользователя, но есть и другие.Например, если вы установите службу как одноэлементную (InstanceContextMode.Single) и не реентерабельную (ConcurrencyMode.Single), то будет обрабатываться только один запрос за один раз для всех пользователей.
Обновление : чтение некоторых документов:
- Службы WCF не регистрируются в сеансах ASP.Net, если вы не попросите об этом (используя)
- Службы WCF могут на основе на службу подписываться с использованием атрибута [AspNetCompatibilityRequirements] в реализации службы
- Похоже, нет никакого способа включить, но не включить сеансstate.
На сайте Wenlong Dong
есть хороший пост в блоге. Итак, из того, что я вижу, вы сможете использовать AspNetCompatibilityRequirementsMode.NotAllowed toполностью отказаться от отдельных услуг из служб ASP.Net.В качестве альтернативы, оставьте его выключенным по умолчанию и включайте только те из них, которым необходим доступ к сеансу ASP.Net (учитывая, что если вам действительно не нужно совместно использовать один и тот же сеанс с ASP.Net, просто использование служб сеансов WCF, вероятно,лучше поспорить).