2010-05-06 82 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上的服務可以調用此服務,並在其他地方提到,桌面客戶端也可以使用該服務通過服務上的另一種方法下載文件的字節。

相關問題