C# 下拉列表和具有持久性的web服务

C# 下拉列表和具有持久性的web服务,c#,asp.net-mvc,linq-to-sql,linq-to-xml,persistence,C#,Asp.net Mvc,Linq To Sql,Linq To Xml,Persistence,我有一个web服务,我想用它作为下拉列表的源。此web服务每周更新一次其数据 现在,我不认为每次显示下拉列表时调用web服务是一个好主意,因为数据只每周更新一次 web服务输出是XML,所以我考虑将其放在一个文件中,并使用LINQtoXML读取该文件并填充下拉列表。但是,如果多个用户在同一个页面上,并且需要填充同一下拉列表,我担心线程问题 我的下一个想法是将xml存储在app_数据目录中的本地数据库中,对db文件的多次读取应该是线程安全的 因此,我想我的问题是,当xml数据存储在数据库中时,如何

我有一个web服务,我想用它作为下拉列表的源。此web服务每周更新一次其数据

现在,我不认为每次显示下拉列表时调用web服务是一个好主意,因为数据只每周更新一次

web服务输出是XML,所以我考虑将其放在一个文件中,并使用LINQtoXML读取该文件并填充下拉列表。但是,如果多个用户在同一个页面上,并且需要填充同一下拉列表,我担心线程问题

我的下一个想法是将xml存储在app_数据目录中的本地数据库中,对db文件的多次读取应该是线程安全的

因此,我想我的问题是,当xml数据存储在数据库中时,如何读取xml数据来填充下拉列表?是linq到xml,还是linq到sql

另外,我如何让我的应用程序每周调用一次服务来刷新本地数据库


有什么建议吗?

如果您使用LINQ to XML将其存储在数据库中,那么将其读回的明显选项是LINQ to SQL。但是您可以存储XML文件本身,并将其用作下拉列表的数据源。您只需编写一个实用程序,它将使用webservice的新输出更新XML文件。

我想您有以下方法:

DateTime ComputeLastPublicationDate();

List<Item> GetListFromWebService();

void StoreListToLocalStorage(List<Item> list, DateTime queryDateTime);

List<Item> GetListFromLocalStorage(out DateTime queryDateTime)
如果列表从未在本地存储,则最后一个返回null

private object itemsLock = new object();
private DateTime? lastQuery = new DateTime();
private List<Item> items;

public List<Item> Items
{
    get
    {
        DateTime lastPublication = ComputeLastPublicationDate();

        if (items != null && lastQuery >= lastPublication)
            return items;

        lock (itemsLock)
        {
            // lock double check
            if (items != null && lastQuery >= lastPublication)
                return items;

            // not yet retrieved locally 
            if (items == null)  
            {
                items = GetListFromLocalStorage(out lastQuery);
            }
            if (item == null || lastQuery < lastPublication)
            {
                items = GetListFromWebService();
                lastQuery = DateTime.Now;
                StoreListToLocalStorage(items, lastQuery);
            }
            return items;
        }
    }
}

我希望这会有帮助。

谢谢,确实有帮助。