2

我正在使用 WCF REST 服务(.Net 4.0)创建一个客户端-服务器应用程序,我在那里看到了非常奇怪的错误。要访问我使用 HttpClient 类的服务,代码如下所示:

public TResponse Post<TRequest, TResponse>(Uri uri, TRequest request)
    using (HttpClient client = new HttpClient())
    {                
        client.TransportSettings.Credentials = CredentialCache.DefaultCredentials;
        client.TransportSettings.ConnectionTimeout = TimeSpan.FromSeconds(200);

        using (HttpResponseMessage response = client.Post(uri, HttpContentExtensions.CreateDataContract(request, null)))
        {
            response.EnsureStatusIsSuccessful();
            return response.Content.ReadAsDataContract<TResponse>();
        }
    }
}

我在 IIS7 上托管我的服务,并且当启用匿名身份验证时一切正常,但是当我打开 Windows 身份验证时,一些随机请求(平均 10 个)因 400-Bad 请求状态而失败,并且错误消息是:Bad Request - Invalid动词。HTTP 错误 400。请求动词无效。

会是什么呢?

还有一点更新:如果打开 fiddler,一切正常。

4

1 回答 1

1

我在这里遇到了同样的事情。真是一个谜。我不明白为什么让提琴手运行会消除问题。

我最终发现这个问题是由添加到帖子中的“expect continue”标题引起的。我删除了它,帖子成功而不是 400 错误请求。

这是一个很好的条目:http: //blogs.msdn.com/b/jaskis/archive/2009/04/19/asmx-post-request-fails-with-http-400-error-when-content-length -size-increases.aspx

就我而言,这是 apache HTTP Client v4.0 所以,

    httpClient.getParams().setBooleanParameter(
            CoreProtocolPNames.USE_EXPECT_CONTINUE, false);

成功了。

于 2014-07-11T17:15:09.377 回答