日期:2014-05-17  浏览次数:20943 次

WPF中使用WebClient 向win7 上传文件
问题:WPF客户端程序使用webclient向服务器上(操作系统是win7+iis 6)传图片(或者其他文件)时,出现后文的异常,文件就不能正常上传;但是在xp系统上是可以的,开始怀疑是虚拟目录没有写入权限,于是给了IIS_USER写入权限,但是还是不行,求问各位大神有没有遇到此类问题,如何解决呢?


代码:
/////////////////////////////////////

  try
  {
  string serverFullPath = string.Format("{0}{1}", syscfg.ImageSavePathServer, curSnapImageName);
  //string serverFullPath = string.Format("{0}{1}", syscfg.ImageSavePathServer, "test.jpg");

  string clientFullPath = string.Format("{0}{1}", syscfg.ImageSavePath, curSnapImageName);
  WebClient myWebClient = new WebClient();

  myWebClient.Credentials = CredentialCache.DefaultCredentials;

  FileStream fs = new FileStream(clientFullPath, FileMode.Open, FileAccess.Read);

  BinaryReader br = new BinaryReader(fs);

  Byte[] postArray = br.ReadBytes(Convert.ToInt32(fs.Length));

  Stream postStream = myWebClient.OpenWrite(serverFullPath, "PUT");

  if (postStream.CanWrite)
  {
  postStream.Write(postArray, 0, postArray.Length);
  }
  else
  {
  throw new Exception("服务器端,没有写权限!");
  }

   
  // br.Close();
  postStream.Close();//一调用该方法就出现405异常 如下所示
  //fs.Close();
  // br.Close();



  return string.Empty;
  }
  catch(Exception ex)
  {
  // MessageBox.Show("上传图片文件失败!","系统提示:");
  string msg = string.Format("Exception message:{0};track {1};ex string{2}",ex.Message,ex.StackTrace,ex.ToString());
  return msg;
  }


////////////////////////////////////////////////////////////////////////////////////
"Exception message:远程服务器返回错误: (405) 不允许的方法。;track 在 System.Net.HttpWebRequest.GetResponse()\r\n 在 System.Net.WebClient.GetWebResponse(WebRequest request)\r\n 在 System.Net.WebClient.WebClientWriteStream.Dispose(Boolean disposing)\r\n 在 System.IO.Stream.Close()\r\n 在 EvalStar.VideoEvaluate.UploadImageToServer() 位置 E:\\TchEvl\\EvalStar\\EvalStar\\VideoEvaluate.xaml.cs:行号 287;ex stringSystem.Net.WebException: 远程服务器返回错误: (405) 不允许的方法。\r\n 在 System.Net.HttpWebRequest.GetResponse()\r\n 在 System.Net.WebClient.GetWebResponse(WebRequest request)\r\n 在 System.Net.WebClient.WebClientWriteStream.Dispose(Boolean disposing)\r\n 在 System.IO.Stream.Close()\r\n 在 EvalStar.VideoEvaluate.UploadImageToServer() 位置 E:\\TchEvl\\EvalStar\\EvalStar\\VideoEvaluate.xaml.cs:行号 287" string



------解决方案--------------------
401 未经授权就是文件夹没有写入权限,iis的目录安全性和物理文件夹都要设置,
另外,serverFullPath需要是完整的http:/xxxx/xx.jpg这样的格式
------解决方案--------------------

IIS6 和IIS 5 的差别确实很大,IIS6的性能是IIS5的N倍了