C# 下拉列表和具有持久性的web服务
我有一个web服务,我想用它作为下拉列表的源。此web服务每周更新一次其数据 现在,我不认为每次显示下拉列表时调用web服务是一个好主意,因为数据只每周更新一次 web服务输出是XML,所以我考虑将其放在一个文件中,并使用LINQtoXML读取该文件并填充下拉列表。但是,如果多个用户在同一个页面上,并且需要填充同一下拉列表,我担心线程问题 我的下一个想法是将xml存储在app_数据目录中的本地数据库中,对db文件的多次读取应该是线程安全的 因此,我想我的问题是,当xml数据存储在数据库中时,如何读取xml数据来填充下拉列表?是linq到xml,还是linq到sql 另外,我如何让我的应用程序每周调用一次服务来刷新本地数据库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数据存储在数据库中时,如何
有什么建议吗?如果您使用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;
}
}
}
我希望这会有帮助。谢谢,确实有帮助。