Альтернативный сеанс/статические переменные ASP.NET/C#

Я хотел бы знать, есть ли действительный сеанс или статический в среде .NET. Что мне нужно, так это переменная для хранения некоторых данных, сохраняющих свое значение, доступная через все страницы ASP.NET/формы C#, но не уникальная для всех пользователей, использующих приложение.


person chenny    schedule 04.01.2013    source источник
comment
Вы даже не гуглили .net и сеанс? Посмотрите: msdn.microsoft.com/en-us /библиотека/ms178581(v=vs.100).aspx   -  person Pleun    schedule 04.01.2013
comment
Да, я искал в Интернете, но я не нашел то, что мне нужно. Может я не те слова использовал. Да, в основном я использую C# для приложений Windows Forms.   -  person chenny    schedule 09.01.2013


Ответы (6)


Тогда ваш ответ, скорее всего, будет «Кэш приложений». Посмотрите на System.Web.Caching

Поскольку время жизни объекта кеша обсуждается, вы можете установить его. Пользователь не указал, однако, как долго это должно прожить. Между перезапусками приложений? во время жизни одного экземпляра, должен ли он быть между экземплярами. Кэш подойдет для самого простого требования.

person Chad Ruppert    schedule 04.01.2013
comment
Это не гарантирует сохранения своей ценности, не так ли? - person Pleun; 04.01.2013
comment
На время жизни приложения это так. он не будет работать между экземплярами по умолчанию. - person Chad Ruppert; 04.01.2013
comment
Кэш приложения сохраняет свое значение до тех пор, пока вы не установите для него срок действия (скользящий или абсолютный), или ваше приложение не перезапустится, или вы не удалите запись из кеша с помощью какого-либо другого механизма. - person hnafar; 04.01.2013
comment
+1 хорошо, я это вижу. Но вопрос также подразумевает не уникальность для всех пользователей и кеш - person Pleun; 04.01.2013
comment
Кэш, безусловно, НЕ уникален для всех пользователей. Он говорит, что специально хочет именно так. - person Chad Ruppert; 04.01.2013
comment
Гарантируется сохранение своего состояния в пределах одного экземпляра iis. Это можно настроить и в ферме iis. Это применимо только для хостов iis. - person Casper Leon Nielsen; 04.01.2013

Я думаю, вы ищете состояние приложения, а не кэш приложения. Состояние приложения будет работать так же, как состояние сеанса, но будет общим для всех сеансов.

Пример использования:

 Application["Message"] = "Welcome to my Website"; 

Дополнительная информация: http://www.codeproject.com/Articles/87316/A-walkthrough-to-Application-State

person Sebastian K    schedule 04.01.2013
comment
Не отвечает на вопрос, так как оп специально упоминает winforms - person Casper Leon Nielsen; 04.01.2013
comment
В вопросе упоминается ASP.NET, на нем также есть тег ASP.NET. - person Sebastian K; 04.01.2013
comment
Да, и тогда ваш ответ правильный. Однако op упоминает формы С#, которые могут быть winforms. Win формы не имеют доступа к описанному вами набору инструментов - person Casper Leon Nielsen; 04.01.2013
comment
Но состояние приложения разделяет значение для всех пользователей. Я ищу что-то, к чему я могу получить доступ со всех страниц, но по-разному для каждого пользователя, имеющего доступ к веб-сайту. Например, для хранения System.Security.Principal.WindowsIdentity.GetCurrent().Name - person chenny; 09.01.2013
comment
Я вижу, что в этом случае в ASP.NET вы можете использовать состояние сеанса, использование такое же, вы просто используете сеанс вместо приложения. Если вы имеете в виду Windows Forms, у вас обычно будет один человек, использующий ваше приложение, поэтому обычно это не проблема. Если только вы не хотите предоставить возможность, чтобы несколько пользователей на одном компьютере имели свои собственные профили. Затем вы можете заглянуть в локальное хранилище. - person Sebastian K; 09.01.2013

Можно ли использовать кеш приложения? он является общим для всех пользователей вашего приложения, доступен со всех страниц и не уникален для каждого пользователя.

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

person hnafar    schedule 04.01.2013
comment
Если вам нужно поддерживать эти значения за пределами срока службы экземпляра вашего приложения, вам, возможно, придется прибегнуть к постоянному хранилищу данных вместо сеансов, кеша и т. д., то есть файла или базы данных. - person hnafar; 04.01.2013
comment
Не вместо сеансов. Вы можете легко настроить поставщика сеансов для использования постоянного хранилища. Смешивание яблок и бананов ;) - person Casper Leon Nielsen; 04.01.2013

Вы можете попробовать справиться с этим с помощью переменной области приложения.

Сначала в файле Global.asax добавьте следующее:

void Application_Start(object sender, EventArgs e)
{
    [Other Stuff Already Here Omitted]
    Application["MyVariable"] = "My Default value";
}

Затем на любой странице вы можете получить доступ к этому:

var myVar = Application["MyVariable"];
person Matt Calhoun    schedule 04.01.2013

Вы можете выставить класс как Static. Это сделает его доступным для всех сеансов, но только для этого экземпляра приложения.

person OnoSendai    schedule 04.01.2013
comment
Это ваша прерогатива, и не стесняйтесь делать это. Мои личные критерии заключаются в том, что отрицательные голоса могут быть применены к неясным или бесполезным ответам, а не из-за личных предпочтений в отношении методологии - и, в конце концов, шаблон - это просто еще один инструмент (согласно моему собственному опыту, часто неправильно используемый), чтобы быть поставлены на работу или нет в зависимости от ситуации. В зависимости от сценария OP статический класс будет удовлетворять его потребности и иметь наименьшее количество «движущихся частей» - таким образом, полезный. - person OnoSendai; 08.01.2013

Ответ - нет. На этом уровне не существует «среды .Net». Ваш код .Net также получает ограничения времени выполнения от хоста. Определим два хоста (их больше): IIS и "просто основной exe".

Для кода, размещенного в IIS, вы работаете в среде, где хост создает поток (или, скорее, выделяет его) и выполняет ваш код в этом потоке. Хост сам определяет, когда и нужно ли сбрасывать процесс. Вы не можете или, скорее, не должны делать никаких предположений о том, какой процесс или поток выполняет ваш код. Это усиливается, когда вы говорите о iis на ферме.

Для простого основного кода в exe операционная система создает процесс и начальный первый поток, а также устанавливает указатель выполнения на первый оператор в основной функции.

«static» поддерживает состояние на протяжении всего жизненного цикла процесса владения, что является гарантией, предоставляемой вам .Net.

«Сеанс» - это конкретная реализация, которая обрабатывает гораздо больше, чем статические свойства.

Я бы порекомендовал уточнить вопрос, где вы также описываете своего хоста. Для iis ответом может быть кэш AppFabric.

Надеюсь это поможет

person Casper Leon Nielsen    schedule 04.01.2013