2015-01-13 68 views
-1

我正在嘗試生成一個HTTP偵聽器,它將接受文件並將其保存到某個位置。HTTP偵聽器接收文件

下面的代碼看到有東西在進入,但是沒有保存文件。

如果您可以查看代碼並讓我知道我哪裏出錯了,我將不勝感激。

class Program 
{ 
    static void Main(string[] args) 
    { 
     Listener(); 
    } 
    public static void Listener() 
    { 
     const string prefix = "http://localhost:8082/"; 
     var listener = new HttpListener(); 
     listener.Prefixes.Add(prefix); 
     try 
     { 
      listener.Start(); 
     } 
     catch (HttpListenerException hlex) 
     { 
      return; 
     } 
     while (listener.IsListening) 
     { 
      var context = listener.GetContext(); 
      ProcessRequest(context); 
     } 
     listener.Close(); 
    } 

    public static void ProcessRequest(HttpListenerContext context) 
    { 
     var filename = Path.GetFileName(context.Request.RawUrl); 
     var path = Path.Combine(@"c:\listenerFiles", filename); 

     try 
     { 
      context.Response.StatusCode = (int)HttpStatusCode.Accepted; 
      Console.WriteLine(context.Response.StatusCode = (int)HttpStatusCode.Accepted); 
      var receivingFile = File.ReadAllBytes(path); 
      Console.WriteLine(receivingFile); 
      context.Response.ContentLength64 = receivingFile.Length; 
      using (var s = context.Response.OutputStream) 
      s.Write(receivingFile, 0, receivingFile.Length); 
     } 
     catch (Exception e) 
     { 

      return; 
     } 


    } 

} 

當此獲取文件中的錯誤,這是投擲讀取

UnauthorisedAccessExcetion

訪問路徑 'C:\ listenerFiles' 被拒絕。

+0

爲什麼你不在'try/catch'中報告任何異常?你可能會得到一個錯誤,然後悄然吞噬掉。 – DGibbs

+0

我沒有看到任何保存文件的代碼。我看到代碼讀取一個文件,並將它發送給調用者 –

+0

我剛剛添加了錯誤即時獲得 –

回答

3

永遠永遠不會發生異常而無需處理! catch (Exception e){ return; }是被禁止的!

這是一個壞主意,在OutputStream使用using,因爲它被設置在using後,使HTTP處理程序不能把它撿起來之後。刪除using,看看它是否工作。

另請檢查IIS進程是否有權訪問該文件所在的路徑。

+0

注意OP詢問*存儲*文件,但代碼*讀取*文件。 –

+0

@PanagiotisKanavos:我想他的意思是「接收客戶端」。然後代碼就是他所要求的。 –

+0

這不是我的標準風格,我只是現在用它來捕捉它在斷點看足夠容易 –