Я совершенно новичок в WCF. Я был почти уверен, что он будет работать как обычные веб-сервисы - и я также уверен, что я тоже делал это неправильно, но теперь я хочу убедиться, что я делаю это правильно.
Наше приложение ASP.Net подключается к службе WCF через Интернет. Я реализовал базовую безопасность и использую SSL. Это работает, но медленнее, чем когда мы работали с обычными веб-сервисами. Возвращаемые данные в основном такие же, как и в обычном веб-сервисе.
Когда я использовал обычный веб-сервис, в любое время, когда мне нужно было получить данные, я создавал новый сервисный объект и вызывал функцию для нужных мне данных. Казалось бы, это работает нормально, но, как я полагаю, это не лучший способ сделать это, особенно если одновременно подключались тысячи пользователей. Поэтому, когда я перешел на WCF, я решил оставить одного клиента открытым и просто использовать его для всех, кто подключается к сайту. Я поместил его в кеш, и когда в кеш выводился объект, у меня была функция обратного вызова для его удаления.
Теперь я даже не думал об этом до тех пор, пока не изменил все, что могло бы создать проблему для нескольких людей, соединяющихся. Если человек А запрашивает данные, человек Б должен дождаться его завершения, прежде чем его данные будут получены через службу.
Так что я изменил его на сессионное. Я либо реализовал это неправильно, либо он просто имел неприятные последствия, так как он не работал вообще. У клиента будет тайм-аут, причина ошибки или просто не работает. Я изменил его обратно на кеширование, и теперь оно работает нормально (кроме медленного).
Что такое «лучшая практика» для этого сценария? Могу ли я создать клиента на лету, когда это необходимо, создать один сеанс на основе (и выяснить, что я сделал не так) или оставить его как есть и использовать метод кэширования с одним клиентом?