WCF InstanceContextMode - PullRequest
       31

WCF InstanceContextMode

2 голосов
/ 29 мая 2009

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

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

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

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

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

1 Ответ

1 голос
/ 29 мая 2009

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

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

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

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

Попробуйте для каждого вызова, сначала один экземпляр и оптимизируйте ТОЛЬКО, если вам действительно нужно!

Марк

...