我想在WinForms应用程序中使用System.Net.WebClient将文件上传到具有Windows身份验证的IIS6服务器,因为它只有'Authentication'方法。System.Net.WebClient不适用于Windows身份验证
WebClient myWebClient = new WebClient();
myWebClient.Credentials = new System.Net.NetworkCredential(@"boxname\peter", "mypassword");
byte[] responseArray = myWebClient.UploadFile("http://localhost/upload.aspx", fileName);
我收到了 '远程服务器返回错误:(401)未经授权',实际上它是一个401.2
客户端和IIS是相同的Windows Server 2003的开发机器上。
当我尝试在Firefox中打开页面并输入与代码中相同的正确凭据时,页面出现。 但是,当使用IE8时,我得到了相同的401.2错误。
试过Chrome和Opera,它们都工作。
我在IE Internet选项中启用了“启用集成Windows身份验证”。
安全事件日志有一个失败审核:
Logon Failure:
Reason: An error occurred during logon
User Name: peter
Domain: boxname
Logon Type: 3
Logon Process: ÈùÄ
Authentication Package: NTLM
Workstation Name: boxname
Status code: 0xC000006D
Substatus code: 0x0
Caller User Name: -
Caller Domain: -
Caller Logon ID: -
Caller Process ID: -
Transited Services: -
Source Network Address: 127.0.0.1
Source Port: 1476
我用进程监视器和提琴手调查,但无济于事。
这为什么这个工程适用于第三方浏览器,但不适用于IE或System.Net.WebClient?
从集成Windows改变IIS的单一身份验证方法为基本后它的工作原理,但并没有解决我的问题,因为我不能改变生产服务器上设置。 – 2009-06-23 01:54:32
我使用IIS的身份验证和访问控制诊断工具来监视进程,并将Firefox的日志与IE的日志进行比较。在NTLM挑战/响应失败之前,它看起来一切正常,但它也没有给我任何线索。 – 2009-07-04 22:11:18
我做了一些更多的测试:上面介绍的2003 Server实际上是虚拟PC中的虚拟机,当使用来自主机的IE时,我可以进行身份验证,但不能在来宾上使用IE。但是,使用访客的IE在使用站点的IP地址时可以工作,而不是通过主机文件设置的主机名。有些事情在这里破裂!我很高兴它不在生产服务器上。 – 2009-07-17 19:24:06