在Web服务调用之间保持XML在内存中

时间:2009-09-11 08:45:11

标签: c# web-services

首先,我不想使用数据库或本地文件。

是否可以将变量存储在内存中,以便每次调用Web服务时都不必创建变量?问题是

FullCompanyListCreateXML();

创建XDocument大约需要1分钟。那么有什么办法可以防止在webservice调用完成后删除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 个答案:

答案 0 :(得分:1)

将xml写入实际指向MemoryStream的流。

然后使用诸如StreamReader

之类的内容进行回读

答案 1 :(得分:1)

2种方式:

1)您可以将一个global.asax类添加到Web服务中,该Web服务将在Web应用程序首次启动时创建,并且只要工作进程将其保留在内存中,它就会持续存在。覆盖

2)创建一个静态类来保存值

有关将global.asax类添加到Web服务的主题,请参阅此blog entrythis post。您可以在会话启动时创建内容,也可以通过覆盖Session_Start或Application_Start方法来启动应用程序

答案 2 :(得分:1)

您可以在ASP.NET中查看using the built-in caching mechanism。它很容易使用。