我有一个Web服务,我想用它作为我的下拉列表的来源。此Web服务每周更新一次数据。
现在我不认为每次显示下拉列表时调用Web服务都是一个好主意,因为数据只会每周更新一次。
Web服务输出是XML,所以我考虑将它放在一个文件中并使用linq to xml来读取文件并填充下拉列表。但是如果多个用户是同一个页面并且需要填充相同的下拉列表,我担心线程问题。
我的下一个想法是将xml存储在app_data目录中包含的本地数据库中,对db文件的多次读取应该是线程安全的。
所以我想我的问题是如何读取xml数据以填充下拉列表,当它存储在数据库中时是否为linq to xml,linq to sql?
另外,如何让我的应用程序每周调用一次服务来刷新本地数据库?
有什么建议吗?
答案 0 :(得分:0)
如果使用LINQ to XML将其存储在数据库中,那么读取它的明显选项是LINQ TO SQL。但是您可以存储XML文件本身并将其用作下拉列表的数据源。您只需要编写实用程序,它将使用webservice的新输出更新您的XML文件。
答案 1 :(得分:0)
我想你有以下方法:
DateTime ComputeLastPublicationDate();
List<Item> GetListFromWebService();
void StoreListToLocalStorage(List<Item> list, DateTime queryDateTime);
List<Item> GetListFromLocalStorage(out DateTime queryDateTime)
如果列表从未存储在localy中,则最后一个返回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;
}
}
}
我希望这会有所帮助。