2017-02-07 48 views
0

如何在使用Webjobs時讀取文件?webjob在本地和在生產中讀取文件

試圖做到這一點:

using (StreamReader sr = new StreamReader(VirtualPathProvider.OpenFile("~/content/file/file.txt"))) 
      { 
       template = sr.ReadToEnd(); 
      } 

但本地運行失敗

回答

3

根據你的描述,對局部:

我們可以使用下面的代碼來獲取WebJob項目的根路徑。

rootPath = Path.GetDirectoryName(Path.GetDirectoryName(Directory.GetCurrentDirectory())); 

爲天青:

D:\home爲我們分享,我們可以閱讀或在此路徑寫入文件。有關主目錄訪問的更多詳細信息,請參閱document。 Azure上的文件結構請參考另一個document。我們也可以從Kudu(http://yourwebsite.scm.azurewebsites.net/)工具中瀏覽它。

爲了方便我們的客戶,沙箱在內核模式下實現了動態符號鏈接,該鏈接將d:\ home映射到客戶主目錄。這樣做是爲了消除客戶在訪問網站時繼續參考他們自己的網絡共享路徑的需要。在站點運行,或有多少網站在虛擬機上運行沒有問題,如果沒有環境變量「家」,我們可以使用下面的代碼來做到這一點每個人都可以訪問使用

rootPath = Environment.GetEnvironmentVariable("HOME") + @"\site\wwwroot" 

自己的主目錄。

string path; 
if (Environment.GetEnvironmentVariable("HOME")!=null) 
{ 
    path = Environment.GetEnvironmentVariable("HOME") + @"\site\wwwroot" + @"\testfilename.txt"; 
} 
else 
{ 
    path = Path.GetDirectoryName(Path.GetDirectoryName(Directory.GetCurrentDirectory())) + @"\testfilename.txt"; 
    } 

以下是詳細的測試步驟:

1.創建一個WebJob項目,並在項目test.text文件和文件夾的測試

enter image description here

2.As我用定時器因此我需要在program.cs中添加config.UseTimers()

enter image description here

3。在Function.cs文件中添加以下代碼

public static void ProcessQueueMessage([TimerTrigger("00:00:03")] TimerInfo timerInfo, TextWriter log) 
     { 
      string instance = Environment.GetEnvironmentVariable("WEBSITE_INSTANCE_ID"); 
      string newMsg = $"WEBSITE_INSTANCE_ID:{instance}, timestamp:{DateTime.Now}"; 
      string path; 
      if (Environment.GetEnvironmentVariable("HOME")!=null) 
      { 
       path = Environment.GetEnvironmentVariable("HOME") + @"\site\wwwroot" + @"\test.txt"; 
      } 
      else 
      { 
       path = Path.GetDirectoryName(Path.GetDirectoryName(Directory.GetCurrentDirectory())) + @"\test.txt"; 
      } 
      string template = File.ReadAllText(path); 
      log.WriteLine($"NewMsge: {newMsg},file Content:{template}"); 
      Console.WriteLine($"NewMsge: {newMsg},file Content:{template}"); 
     } 

4.在本地計算機上進行測試。

enter image description here

畫完部署到Azure中,並從Azure的WebJob儀表盤日誌。

enter image description here

6.After部署到Azure中,並從Azure的WebJob儀表盤日誌。

enter image description here