2015-12-21 74 views
0

基于给定的XML模式,我想创建一个XML文档并在MVC 5应用程序中将其作为下载提供。我在应用程序中使用EF和Linq到Entity。我不确定使用哪种方法来创建XML文件。任何想法,将最适合我的需要?:ASP.NET MVC基于XML模式导出XML

  • XMLWriter的
  • 的XMLDocument
  • 的LINQ to XML
  • 类型化的DataSet

导出XML的文件(基于旧的文件)将有大约500KB,并且我有大约2500个用户。并非所有的用户都会同时下载他们的XML文件,但我也不知道有多少人会同时下载这个文件。我应该在内存中创建文件(通过使用MemoryStream还是类型化的DataSet),还是应该先在磁盘上写入文件(FileStream和XMLWriter/XMLDocument),然后提供下载文件?

更新
- 预置

回答

0

我建议你使用XmlSerializer的应用程序将被托管 - 为不同的XML文件将每个用户
产生。

首先定义类为Serializable

[Serializable] 
public class MyClass 
{ 
    public string Property { get; set; } 
} 

然后使用XmlSerializer的:

using System.Xml.Serialization; 

var serializer = new XmlSerializer(typeof(MyClasse)); 
var xmlString = serializer.Serializer(new MyClass); 

如果您正在使用云中工作,在S3中保存这个XML文件的AWS或斑点为天青。

如果您正在使用单个服务器,请在内存中为此文件创建一个缓存,那么可以使用OutputCache属性非常简单地创建缓存。类似的东西:

[OutputCache(Duration = 360/*seconds*/)] 
public ActionResult CreateXml() 
{ 
    //code here 
} 

使用OutputCache你有3种方式来定义什么样的要求,从另一个不同的,它们分别是:

  • VaryByCustom是 =>表示自定义输出缓存要求的任何文本。
  • VaryByHeader =>用于改变输出缓存的以分号分隔的HTTP标头列表。
  • VaryByParam =>分号分隔的字符串列表,对应于GET方法的查询字符串值或POST方法的参数值。 XmlDataSet VS的XmlSerializer的

例子:https://dotnetfiddle.net/5dzcP4

+0

阿尔贝托嗨!所以你建议我创建一个POCO类,填入所需的数据,然后将这个类序列化为XML。这种方法与类型化的数据集不相似吗?正如我所提到的,我已经有了XSD-File,所以我可以轻松创建一个类型化的DataSet,然后使用WriteXML()方法来创建文件。使用XmlSerializer时会有什么优势? 应用程序将自我托管(内部部署),所以我可以使用OutputCache属性,但由于必须为每个用户生成不同的xml文件,因此我不确定缓存是否真的可以帮助我解决这种情况。 –

+0

我通过一些改进改变了我的问题。我更喜欢XmlSerializer,因为它比数据集更容易工作,代码行更少,速度也更快,而且更灵活,但如果您对数据集感觉更舒适,请继续使用它。关于为每个用户输出缓存,我在问题3中添加了可用于使请求不同的方法。 –