2014-01-15 31 views
0

我有一个Web服务,我想用它作为我的下拉菜单的源。该Web服务每周更新一次数据。下拉列表和具有持久性的Web服务

现在我不认为每次显示下拉菜单时调用Web服务在这种情况下都是一个好主意,因为数据只会每周更新一次。

Web服务输出是XML,因此我想将它放在一个文件中,并使用linq to xml来读取文件并填充下拉列表。但是如果多个用户是同一个页面并且需要填充相同的下拉菜单,我担心线程问题。

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

所以我想我的问题是我怎样才能读取XML数据填充下拉时,它存储在数据库中它是LINQ到XML,LINQ到SQL?

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

有什么建议吗?

回答

0

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

0

我想你有以下几种方法:如果该列表从未localy存储

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; 
     } 
    } 
} 

我希望这会有所帮助。

+0

谢谢,它确实有帮助。 – Bill