2014-12-01 98 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

相关问题