Вопрос

У меня есть веб-приложение, использующее прокси-сервер для вызова операции в службе WCF, которая возвращает данные из AS400, такие как различные регионы продаж, связанные с нашими компаниями, различные магазины, которые у нас есть на местах, и т.д.Эти регионы продаж и магазины меняются нечасто, магазины добавляются, возможно, только два раза в год, а регионы остаются неизменными в течение нескольких лет.

Я предполагаю, что моя путаница связана с InstanceContextMode.Я просто возвращаю список "Регионов" и "Хранилищ", когда прокси-клиент вызывает GetRegions() или GetStoresForRegion (int RegionNumber)

Если я установлю для InstanceContextMode значение single и инициализирую и заполняю регионы и хранилища до начала любого вызова операции обслуживания, поможет ли это каким-либо образом?По сути, прямо сейчас он выполняет поиск в базе данных при каждом вызове, и я не думаю, что в этом есть необходимость.

Итак, пользователь входит в веб-приложение -> страница веб-приложения -> должен загрузить выпадающий список регионов -> веб-разработчик вызывает прокси для получения регионов...но это происходит, когда каждый отдельный пользователь использует веб-приложение, поэтому, по сути, каждый раз, когда пользователь обращается к веб-приложению, прокси-сервер вызывает базу данных, я считаю, что это глупость и ошибка в том, как я настроил работу службы, или я что-то совершенно неправильно понял?

Служба обновлений размещена в IIS, поэтому весь этот вопрос может быть спорным

Это было полезно?

Решение

Основная рекомендация наилучшей практики заключалась бы в использовании служб для каждого вызова в одном экземпляре.Это самое простое в создании, никаких кошмаров с параллелизмом и т.д.

НО:конечно, каждый раз, когда вы вызываете службу, создается экземпляр службы и запрашивается серверная часть базы данных.

Если это когда-нибудь возможно, постарайтесь придерживаться этого.Попробуйте внедрить логику кэширования в базу данных - если у вас достаточно оперативной памяти, большая часть часто запрашиваемых вами данных останется в памяти.

Переход к ConcurrencyMode = multiple в ваших службах WCF приводит к появлению всевозможных проблем с параллелизмом, с которыми вам нужно быть предельно осторожными.Старайтесь избегать этого, когда это возможно.

Попробуйте сначала для каждого вызова, в одном экземпляре и оптимизируйте ТОЛЬКО в ТОМ случае, если вам ДЕЙСТВИТЕЛЬНО нужно!

Марк

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top