2014-12-01 79 views
3

我遇到了以下代碼在Windows 2003計算機上工作的問題,現在我們正在升級到2008年並且它不再有效。當代碼到達getResponse()時,它給我一個405錯誤。IIS 7.5 - Windows Server 2008 - 文件上傳405錯誤。代碼在Windows 2003服務器中工作

我正在通過IIS寫入虛擬目錄。
我也試過把它作爲一個應用程序,它沒有任何區別。 我們沒有安裝/啓用webdav。

我到處搜索,似乎無法找到正確的解決方案,讓我寫文件。

我已經提供了一個用來上傳文件的基本代碼...

saveLocation.Length = 0; 
saveLocation.Append(Path.GetFileName(files[0])); 

    inStream = File.Open(files[0], FileMode.Open); 
    HttpWebRequest myWebRequest = (HttpWebRequest)WebRequest.Create("http://localhost/kw/archive/testFile.pdf"); 

     myWebRequest.ContentType = contentType; 
     myWebRequest.Method = "put"; 
     //myWebRequest.Headers.Add("action", "put"); 
     myWebRequest.Headers.Add("filename", saveLocation.ToString()); 
     myWebRequest.ContentLength = inStream.Length; 

     dataToRead = (int)inStream.Length; 
     outStream = myWebRequest.GetRequestStream(); 

     while (dataToRead > 0) { 
     if (Response.IsClientConnected) { 
      length = inStream.Read(buffer, 0, 10000); 
      outStream.Write(buffer, 0, length); 
      buffer = new Byte[10000]; 
      dataToRead = dataToRead - length; 
     } 
     else { 
      dataToRead = -1; 
     } 
     } 

     HttpWebResponse myWebResponse = (HttpWebResponse)myWebRequest.GetResponse(); 

     myWebResponse.Close(); 
     inStream.Close(); 
     outStream.Close(); 

更新:我目前得到一個405錯誤。

+0

你能再發表這項錯誤的更多詳細信息? – Mairaj 2014-12-15 10:14:59

+0

我收到了405錯誤。我已經嘗試了一切,無法弄清楚阻止請求的內容。如果有幫助的話,WebDav沒有安裝。 – 2014-12-15 15:09:11

+0

您是否啓用了失敗的請求追蹤?如果是這樣你能從日誌中發佈事件數據嗎? – Aaron 2014-12-16 14:03:27

回答

0

405錯誤表示方法不允許。在上面的代碼中,您使用的是「PUT」方法,我認爲這種方法在IIS中是不允許的。嘗試啓用此功能,然後檢查。如果你有想法如何啓用這個比嘗試,如果你不檢查這link。我希望這將解決您的問題。

0

405均值方法不允許 - 最可能的原因是PUT動詞未被允許通過IIS設置。我相信這是一個安全設置,在IIS6和IIS7之間收緊,因爲PUT和DELETE請求現在默認被阻止。

要在站點設置下的IIS管理器中啓用PUT請求,會出現一個標有請求過濾的圖標。如果你打開它,你會看到許多標籤,其中一個叫做HTTP VERBS,切換到這個標籤。從右側的動作面板中選擇允許動詞並在出現的對話框中鍵入PUT,然後選擇確定。

另外,您可以添加以下到你的web.config文件:

<security> 
    <requestFiltering> 
     <verbs allowUnlisted="false"> 
      <add verb="PUT" allowed="true" /> 
     </verbs> 
    </requestFiltering> 
</security> 

如果不行,我們需要有更多的知道什麼是對這一呼籲的接收端。接收請求的代碼是什麼?

+0

我已經擁有該屬性集。我對StaticFile處理程序做了小小的調整,現在IIS正在返回一個200狀態碼,但該文件仍然不存在。 <處理程序accessPolicy =「讀取,執行,腳本,寫入」> 2014-12-16 18:56:31

+0

只需要清楚,您希望IIS將文件從PUT請求寫入磁盤而無需任何自定義代碼?我不認爲靜態文件處理程序能夠寫入文件,只是讀取它們。 – 2014-12-17 21:36:19

+0

看起來不像你可以用WebDAV做的那樣http://support.microsoft.com/kb/2021641/en-us#。你可以使用WebDAV來做到這一點,但你必須修改你的客戶端來驗證http://blogs.iis.net/robert_mcmurray/archive/2010/02/09/sending-webdav-requests-in-net.aspx。 – 2014-12-17 22:06:23

相關問題