WPF中使用WebClient 向win7 上传文件

ambitionzfx 2012-09-29 12:35:28
问题: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

...全文
507 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2014-10-04
  • 打赏
  • 举报
回复
请问这个问题现在解决了吗?解决方法时什么?
liangjie_8513 2014-06-09
  • 打赏
  • 举报
回复
同样遇到401问题的路过
poweroo7 2014-06-03
  • 打赏
  • 举报
回复
我碰到的问题和你一摸一样,也是先出现405问题,弄了webdav后出现401问题,现在卡在这了,不知道怎么弄,楼主问题解决了吗?能分享一下经验吗?
zydzhy123 2014-04-16
  • 打赏
  • 举报
回复
解决了没啊!
llyyqqqq 2014-03-26
  • 打赏
  • 举报
回复
这个问题解决了吗
lijin1111111111 2013-10-30
  • 打赏
  • 举报
回复
这个问题解决了吗
部落太阳 2013-04-16
  • 打赏
  • 举报
回复
楼主这问题搞写了没有?
ambitionzfx 2012-09-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

iis6里面的匿名账户是NETWROK Service
iis目录安全性启用匿名
物理文件夹加NETWROK Service账户可写入权限,asp.net不是使用的IIS_USERXXXXX,

注意iis目录安全性匿名的匿名账户采用默认的就行
[/Quote]
大哥,我都按照你说的设置了,还是那样的错误,能远程控制一下不?qq:陆陆四九一起久久灵
ycproc 2012-09-29
  • 打赏
  • 举报
回复

IIS6 和IIS 5 的差别确实很大,IIS6的性能是IIS5的N倍了
孟子E章 2012-09-29
  • 打赏
  • 举报
回复
iis6里面的匿名账户是NETWROK Service
iis目录安全性启用匿名
物理文件夹加NETWROK Service账户可写入权限,asp.net不是使用的IIS_USERXXXXX,

注意iis目录安全性匿名的匿名账户采用默认的就行
ambitionzfx 2012-09-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

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

谢谢大哥,
按照这个错误提示,确实是没有写入权限,但是IIS的目录安全性已经给了写入权限;物理文件夹的写入权限也给了;
我用的iis 6 是这么操作的:在IIS 6管理器中,点击我的虚拟目录,在右边的编辑权限里给了 everyone ,IUSR, IIS_IUSRS这几个用户写入权限;并且也配置了下身份验证,启用了匿名访问,不过这里选择的是特定用户,然后我输入的是IUSR,密码为空,感觉IIS6 和IIS 5 差别蛮大的,在IIS 5里启用匿名访问后默认用户是IIS_USERXXXXX,而且可以勾选让IIS控制密码;

另外,serverFullPath也是您说的那种uri的格式;

还是401;
///////////////////
"Exception message:远程服务器返回错误: (401) 未经授权。;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:行号 288;ex stringSystem.Net.WebException: 远程服务器返回错误: (401) 未经授权。\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:行号 288" string
孟子E章 2012-09-29
  • 打赏
  • 举报
回复
401 未经授权就是文件夹没有写入权限,iis的目录安全性和物理文件夹都要设置,
另外,serverFullPath需要是完整的http:/xxxx/xx.jpg这样的格式
ambitionzfx 2012-09-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

服务器上启用WebDav扩展协议了吗
[/Quote]

现在我启用了WebDav,出现401 未经授权的错误,这是怎么回事呢?
孟子E章 2012-09-29
  • 打赏
  • 举报
回复
服务器上启用WebDav扩展协议了吗

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧