Статические переменные в WCF - PullRequest
8 голосов
/ 13 февраля 2011

У меня есть несколько услуг WCF. Эти службы работают в ASP.NET. Я хочу, чтобы эти службы имели доступ к статической переменной. Моя проблема в том, что я не уверен, где находится соответствующий механизм хранения на уровне сервера. Я не хочу использовать базу данных из-за скорости. Но я хочу, чтобы статические переменные оставались в памяти как можно дольше. На самом деле, я бы хотел, чтобы он оставался до перезагрузки сервера, если это возможно.

Кто-нибудь может дать мне какие-нибудь идеи?

Ответы [ 3 ]

14 голосов
/ 13 февраля 2011

Вы можете использовать статические переменные в WCF, но вы должны правильно синхронизировать доступ к ним, потому что они могут быть доступны из нескольких потоков одновременно.Значения, хранящиеся в статических переменных, доступны из любого места в AppDomain и остаются в памяти до перезапуска сервера.

4 голосов
/ 13 февраля 2011

Вы могли бы иметь что-то вроде этого

public static class StaticVariables
{
    private static string _variable1Key = "variable1";

    public static Object Variable1
    {
        get 
        {
            return Application[_variable1Key]; 
        }

        set 
        {
            Application[_variable1Key] = value; 
        }
    } 
}

Сама коллекция Application является поточно-ориентированной, но вы не можете добавлять в нее то, что добавляете; так что имейте это в виду.

0 голосов
/ 02 апреля 2014

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

[ServiceBehavior( InstanceContextMode = InstanceContextMode.Single )]
public class MyService : IMyServiceContract
{
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...