Как вернуть HttpContext.Current.Cache из WCF?

У меня есть служба WCF, размещенная в IIS, и я хочу вернуть данные, находящиеся в кеше IIS (HttpContext.Current.Cache). Какой наиболее подходящий тип должен возвращать эта служба?


person Community    schedule 29.01.2009    source источник


Ответы (3)


На вашем месте я бы не стал полагаться на то, что служба размещена в IIS. Что, если вы хотите разместить свой сервис WCF с помощью какой-либо другой технологии? Я думаю, вам следует проверить memcached, который является гораздо более общим решением для кэширования и отлично работает с файлами . СЕТЬ.

В любом случае, если вы действительно хотите использовать кеш IIS, используйте System.Web.HttpRuntime.Cache вместо HttpContext.Current.Cache, поскольку HttpContext не всегда доступен.

Кроме того, как сказал круизер, фактический тип ваших объектов совершенно не имеет значения, если они сериализуемы (то есть классы украшены [Serializable()] атрибут). Кэш IIS сам по себе не требует сериализуемых объектов, в отличие от WCF.

person Tamas Czinege    schedule 29.01.2009
comment
я согласен. избегайте жесткой привязки вашего сервиса к работе только с IIS. - person cruizer; 29.01.2009
comment
Я также согласен. Пожалуйста, не связывайте сервисы WCF. Это заставляет Джуваля Лоуи плакать. - person Tad Donaghe; 29.01.2009
comment
+1 за совет System.Web.HttpRuntime.Cache. У меня была проблема с HttpContext.Current.Cache, я не понимал, что это было причиной, исправлено, когда я переключился на HttpRuntime, спасибо - person Ralph Lavelle; 31.07.2010

Вы сериализуете свои объекты для их транспортировки, но нет необходимости кэшировать сериализуемые объекты.

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

Оберните API кэша и отделите его от кэша HttpRuntime. Как сказал DrJokepu, доступ к кешу asp.net осуществляется через HttpRuntime.Cache, если вы так выберете.

person user134706    schedule 08.07.2009

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

person cruizer    schedule 29.01.2009
comment
если кеш находится в памяти, вам не нужно сериализовать - person Eric Schoonover; 08.07.2009