2010-07-28 54 views
2

我在我的ASP.NET网站上添加了一个Silverlight应用程序。 Visual Studio创建了一个新的silverlight项目,并将其xap添加到我的网站项目下的ClientBin文件夹中。所以这两个项目都在一个解决方案下。Silverlight Asp.Net项目集成

我的Silverlight应用程序应该读取一个xml文件,我无法使其从网站项目下的客户端bin文件夹访问该文件。添加对该项目的引用不起作用,因为它表示只能添加对其他Silverlight应用程序的引用。现在它的工作时,该文件是在Silverlight项目下,但不是当它在网站项目下。

我该如何让它从网站项目中读取文件?

这个项目的结构

WEBSITE1 (solution) 
-WEBSITE1 (project) 
    -ClientBin 
    -file0.xml 
    -silverlightchart.xap 
-SilverlightChart 
    -file1.xml 

我可以用

XDocument document = XDocument.Load("file1.xml"); 

我想访问file0.xml访问file1.xml但没有路径对我的作品,对如

XDocument document = XDocument.Load("~/ClientBin/file0.xml"); 

和WEBSITE1是启动项目

+0

如果我下面的asnswer没有帮助,请张贴您正在使用访问XML文件中的代码。 – AnthonyWJones 2010-07-28 14:18:53

回答

0

您应该可以从ClientBin文件夹中简单地读取文件,而无需执行任何特殊操作。猜测我会说你不小心将Silverlight应用程序设置为启动项目。在这种情况下,您希望网站成为启动项目,然后将Silverlight应用程序测试页标记为开始页面,或者在浏览器启动后导航到Silverlight页面。

编辑

你的问题是,该Load方法是同步的,但Silverlight不支持网络资源同步访问。因此,将Uri传递给Load方法仅在该Uri可以通过Xap中的内容实现时才有效。这就是为什么Silverlight项目中的Xml文件可以工作,因为它最终在Xap中。

要从你需要做的这个网站中获取XML: -

WebClient client = new WebClient(); 
client.DownloadStringCompleted += (s, args) => 
{ 
    XDocument document = XDocument.Load(args.result); 
    SomeFunctionToContinueWithDocumentProcess(document); 
} 
client.DownloadStringAsync(new Uri("file0.xml", UriKind.Relative); 
// code exits here but _document won't be loaded yet 
+0

我使用 XDocument document = XDocument.Load(“chart.xml”); 当silverlight项目中存在chart.xml文件时。从其他项目clientbin访问文件的路径是什么?谢谢 – anon2 2010-07-28 14:21:57

+0

@ anon2:看我的编辑 – AnthonyWJones 2010-07-28 16:01:06

+0

谢谢安东尼,现在另一种解决方案似乎正在工作,如果失败了,我会按照你提到的方式尝试。我将SilverlightChart中的file0.xml添加为链接(添加现有项目>添加按钮“添加为链接”)。在更改项目文件夹时,似乎链接是动态更新的,因此理论上这应该起作用 – anon2 2010-07-28 16:13:39