2010-05-06 45 views
0

我有一个驻留在serverA上的Web服务。 webservice将负责在serverB上的虚拟目录中查找某种类型的文件,然后将完整的URL返回给这些文件。在远程服务器上查找文件

如果文件位于同一台机器上,我可以使用该服务 - 这是非常简单的。我的问题是什么是在远程服务器上的已知虚拟目录下的所有目录中查找某种类型(例如* .xml)的所有文件的最佳方法?

因此,例如,web服务是http://ServerA/service.asmx和虚拟目录位于http://serverB/virtualdirectory

所以在这个代码,显然的DirectoryInfo不会采取的路径到远程服务器 - 我怎么访问此,所以我可以找到它包含的文件?然后,我如何获得在该远程服务器上找到的文件的完整URL?

 DirectoryInfo updateDirectory = new DirectoryInfo(path); 

     FileInfo[] files = 
      updateDirectory.GetFiles("*.xml", SearchOption.AllDirectories); 

     foreach (FileInfo fileInfo in files) 
     { 
      // Get URL to the file 
     } 

我无法将文件和服务放在同一台服务器上 - IT决策不在我手中。

谢谢!

回答

1

此服务器B仅用作存储库吗?另一种方法是设置应用程序(简单的网络服务可以),读取目录内容并返回URL的列表

您可以扩展它,在该服务上执行文件操作的操作(网络方法)。

+0

这是我接受的答案,因为我认为 a)搜索目录的责任应该可能在文件所在的服务器上。 b)似乎没有简单的方法来远程搜索虚拟目录 如果我添加了第二个服务,那么第一个服务的意义何在?这是缺点,但至少这是一个单一的联系记录等,实际的文件服务器可能会改变... 谢谢 – 2010-05-10 08:15:42

1

您需要确保服务器B上的位置可浏览 - 这意味着当您访问url http://serverB/virtualdirectory时,您可以看到这些文件。

完成此操作后,可以使用System.Net.WebClient从url(DownloadData方法)获取数据。解析数据并使用WebClient获取每个文件。

+0

感谢您的建议 - 但我绝对不希望下载的两个服务器之间的任何数据,因为这些文件可能非常大。我只想获得虚拟目录下特定类型文件的URL列表,然后将其返回给服务的调用者。 – 2010-05-06 13:43:10

0

我会设置在serverA IIS虚拟目录指向服务器B. 一样的UNC路径:http://serverA/virtualdirectory/被映射到\服务器B \文件\ 然后当你已经知道的URL路径,并可以使用取得相应目录getfiles,那么你可以在你的asmx响应中构建一个有效的url。

编辑:由于您使用的是winforms,我建议您甚至不要通过虚拟目录公开您的文件以便通过URL访问。你应该通过你的asmx使用你的winforms客户端流式传输文件。 有很多方法可以做到这一点。这个项目是一个非常完整的MTOM文件传输应用程序的起点。 http://www.codeproject.com/KB/XML/MTOMWebServices.aspx 您也可以使用字节流传输文件。 http://support.microsoft.com/kb/318425

希望有所帮助。

+0

什么是消费Web服务?浏览器或客户端应用程序,如winforms或wpf? – CliffyB 2010-05-06 19:59:26

+0

客户端winforms应用程序正在使用该服务。我将研究将虚拟目录映射到UNC路径。 – 2010-05-07 08:52:35

+0

欣赏额外的编辑,良好的链接和有趣的方法。但是,我正在使用的组件需要完整的URI才能创建下载部分。 – 2010-05-10 08:12:26

1

在ServerB上创建一个Web服务,并让它搜索URLs的目录和返回列表到文件。如果文件信息没有经常更改,您也可以缓存这些信息,从而提高速度。然后,您在ServerA上的服务可以调用此服务,并在其他地方提到,桌面客户端也可以使用该服务通过服务上的另一种方法下载文件的字节。

相关问题