我有一个驻留在serverA上的Web服务。 Web服务将负责在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决定不在我手中。
谢谢!
答案 0 :(得分:1)
您需要确保服务器B上的位置可以浏览 - 这意味着当您访问网址http://serverB/virtualdirectory时,您可以看到文件。
完成此操作后,您可以使用System.Net.WebClient从url(DownloadData方法)获取数据。解析数据并使用WebClient获取每个文件。
答案 1 :(得分:1)
此serverB仅用作存储库吗?另一种方法是设置应用程序(一个简单的Web服务可以),读取目录内容并返回URL列表。
您可以展开它,在该服务上执行文件操作的操作(网络方法)。
答案 2 :(得分:1)
在ServerB上创建一个Web服务,并搜索目录并将URL列表返回给文件。如果文件信息不经常更改,您也可以缓存此信息,从而提高速度。然后,您在ServerA上的服务可以调用此服务,如其他地方所述,您的桌面客户端也可以使用该服务通过服务上的另一种方法下载文件的字节。
答案 3 :(得分:0)
我会在serverA IIS上设置虚拟目录,指向服务器B的UNC路径。 喜欢:http://serverA/virtualdirectory/被映射到\ serverb \ files \ 然后,由于您已经知道URL路径并且可以使用getfiles获取目录,因此您可以在asmx响应中构建一个有效的URL。
编辑:由于您使用的是winforms,我建议您不要通过虚拟目录公开您的文件,以便从URL访问。您应该通过asmx使用winforms客户端流式传输文件。 有很多方法可以做到这一点。该项目是MTOM文件传输应用程序的一个非常完整的起点。 http://www.codeproject.com/KB/XML/MTOMWebServices.aspx 您也可以使用字节流传输文件。 http://support.microsoft.com/kb/318425
希望有所帮助。