webclient问题:期望失败了吗?

时间:2010-06-03 23:57:21

标签: visual-studio httphandler webclient system.net.webexception

我有一个自定义的Http Handler来操作HTTP POST和GET。我让项目工作在一个单独的孤立服务器上,现在需要把它投入生产......

using (var client = new WebClient())
                {
                    client.Credentials = CredentialCache.DefaultCredentials;
                    client.UploadFile("serverlocation:port", fileToUpload);
                }

由于某些原因,现在使用client.UploadFile("", file);,即强制HTTP POST

System.Net.WebException: The remote server returned an error: (417) Expectation failed.

   at System.Net.WebClient.UploadFile(Uri address, String method, String fileName)

这可能是什么?我知道代码有效,还有什么呢?也许服务器会阻止HTTP POST请求?

我尝试过添加:

ServicePointManager.Expect100Continue = false;

但是没有成功,虽然我不是100%确定此代码之前的位置,我假设在我使用WebClient之前


编辑0:

我只有read以下内容:

由于存在较旧的实现,协议允许    客户可能发送的模糊情况“Expect:100-    继续“没有收到417(期望失败)状态    或100(继续)状态。因此,当客户端发送此消息时    标头字段到原始服务器(可能通过代理)从中    从未见过100(继续)状态,客户端不应该等待    在发送请求正文之前无限期。

我认为此请求是通过代理进行的,这可能与问题有关。

修改1:

相信这个问题必须是100-continue,因为使用fiddler来查看我的应用程序使用WebClient.UploadFile发送的确切内容显示了这一点:

POST http://XXX.XXX.XXX.XXX:8091/file.myhandledextension HTTP/1.1
Content-Type: multipart/form-data; boundary=---------------------8ccd1eb03f78bc2
Host: XXX.XXX.XXX.XXX:8091
Content-Length: 4492
Expect: 100-continue

尽管在using语句之前放了那行:ServicePointManager.Expect100Continue = false;。我不认为这条线确实有用。

1 个答案:

答案 0 :(得分:3)

我最终通过将ServicePointManager.Expect100Continue = false;放在调用WebClient类的构造函数中来解决这个问题。

然后我使用Fiddler检查POST请求,以确保Expect: 100-continue不再出现在请求中。