Хранение XML в памяти между вызовами Webservice - PullRequest
0 голосов
/ 11 сентября 2009

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

Можно ли хранить переменные в памяти, чтобы их не нужно было создавать при каждом вызове веб-службы? Проблема в том, что

FullCompanyListCreateXML();

Создание XDocument занимает около 1 минуты. Так есть ли способ предотвратить сброс переменной xml после завершения вызова веб-службы?

    [WebMethod(CacheDuration = 120)]
    public String FullCooperationListChunkGet(int part, int chunksize)
    {
        StringBuilder output_xml = new StringBuilder();
        XDocument xml = FullCompanyListCreateXML();
        IEnumerable<XElement> xml_query = xml.Root.Elements("Cooperation").Skip(part * chunksize).Take(chunksize);

        foreach (XElement x in xml_query)
        {
            output_xml.Append(x.ToString());
        }
        output_xml.Insert(0, "<Cooperations>");
        output_xml.Append("</Cooperations>");
        return output_xml.ToString().Zip();
    }

Спасибо
Хенрик

Ответы [ 3 ]

1 голос
/ 11 сентября 2009

2 способа:

1) Вы можете добавить класс global.asax к веб-службе, который будет создан при первом запуске веб-приложения и будет сохраняться до тех пор, пока рабочий процесс хранит его в памяти. Переопределить

2) создать статический класс для хранения значений

См. Эту запись в блоге или эту запись на тему добавления класса global.asax к веб-службам. Вы можете создавать вещи при запуске сеанса или при запуске приложения, переопределяя методы Session_Start или Application_Start

1 голос
/ 11 сентября 2009

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

1 голос
/ 11 сентября 2009

Запишите xml в поток, который фактически указывает на MemoryStream .

Затем прочитайте его, используя что-то типа StreamReader

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...