2010-08-07 23 views
2

我目前使用xml作为我的silverlight应用程序的配置文件。 我没有问题读取文件,但现在我也需要通过网络更新文件(最好是Silverlight,因为它会显示字体颜色,尺寸等的预览),我唯一想到的方法是生成整个文件并覆盖现有通过上传。更好的建议外部配置文件

有没有更简单的方法来做到这一点?

+0

嗯......如果你需要改变它的客户端,然后将其上传回服务器 - 你能不能将你的配置设置放入数据库表而不是文件中,并更新服务器上的这些设置? – 2010-08-07 07:18:25

+0

谢谢,但这些设置为我的配置将包括数据库连接到数据库服务器可能托管在另一个COM。 有些时候,像我自己的数据库文件/数据库服务器没有托管的规则。 因此设置将需要在外部文件中 – 2010-08-07 07:23:14

+0

@C_Rance:您可以使用“字典方式”来执行此操作。在服务器上,您将执行文件编辑,在SL客户端上,您只需发送更新命令,如“UpdateConfiguration(”FontSize“,45615);'。哪些应该能够接受一组值对。重新上传整个文件可能会更容易。 “dictioanary方式”的好处是你可以轻松地实现更新验证,而不是通过xsd进行验证。 – 2010-08-07 08:30:38

回答

1

好吧,找到我自己的答案,也在这里分享。

当我读取xml文件时,我正在使用linq for xml。 因此,有用于doc.save)的选项( 因此,通过这样做:

System.Xml.Linq.XDocument doc = System.Xml.Linq.XDocument.Parse(s); 

System.Text.StringBuilder sb = new System.Text.StringBuilder(); 
System.IO.StringWriter sr = new System.IO.StringWriter(sb); 
doc.Save(sr); 
string ss = sb.ToString();//result 
sr.Close(); 

我有SS中保存的XML文件。 然后使用Web客户端的OpenWriteCompleted,我用

Stream outputStream = e.Result; 
byte[] fileContent = Encoding.UTF8.GetBytes(ss); 
outputStream.Write(fileContent, 0, fileContent.Length); 
outputStream.Close(); 

使用Web客户端的OpenWriteAsync,该URI将是我的通用处理程序的URI。 里面的通用处理器

FileStream fs = File.Open(context.Server.MapPath("~/ClientBin/" + "test.txt"), FileMode.Create); 

byte[] buffer = new byte[4096]; 
int bytesRead; 
while ((bytesRead = context.Request.InputStream.Read(buffer, 0, buffer.Length)) != 0) 
{ 
    fs.Write(buffer, 0, bytesRead); 
} 
fs.Close(); 

信贷的作者(Nipun托马尔)@,因为大多数的想法来自于他的网站

http://www.c-sharpcorner.com/UploadFile/nipuntomar/FileUploadsilverlight03182009030537AM/FileUploadsilverlight.aspx