400 Bad Request:Apache2考虑HTTP标头后的请求

时间:2013-08-28 08:39:03

标签: c# wcf apache2

我遇到一个WPF应用程序的问题,该应用程序从Windows机器运行并使用位于Apache服务器上的Web服务。 Windows计算机是AD域的成员,Apache Web服务需要(AD)身份验证。

WCF访问Web服务。正如所料,它首先尝试获取URL(webservice),获取401 Unauthorized然后再次尝试使用auth(Windows auth或NTLM auth)。使用auth它成功,一切都很好。

HTTP连接是Keep-Alive,启用100 expect expect(但没有相同的结果)。标题是普通的,并且包含预期的Content-Length(即50kb)。

问题在于,在某些情况下,Apache2将只读取标题部分,然后返回401响应。客户端不知道Apache决定结束这一切,继续发送内容(xml)。由于这是一个保持活跃的Apache2,此时期待下一个请求,而是从第一个请求(XML)接收正文并以“错误请求”响应。当WCF看到此响应时,它会停止并且不会使用auth标头重新发送请求。 Apache日志文件确认了这一点,因为它将XML记录为通常记录GET的错误请求,并且客户端上的Wireshark确认了这一点,因为我在客户端的一个请求中看到了来自Apache的两个HTTP响应。

由于客户端在标题的中间添加了“Content-Length:54102”,我会说这是错误的服务器(注意这一切都发生在Apache执行任何自定义代码之前)。服务器必须指望内容按指定的方式进行,世界上的每个HTTP客户端都不能等待(最大延迟)中断,等待服务器可能向头部发送标头响应。

所以我认为这个问题有两个解决方案:

  1. 修复Apache。
  2. 在第一次请求时进行WCF身份验证。
  3. #1是一个更适合serverfault的服务器问题 #2可以在C#代码中完成,但是从我的Google研究中看来人们可以使用基本身份验证(当你可以向用户询问用户/通行证时)。但是我需要它作为Windows / NTLM auth。

    所以,我的问题是:如何在第一次请求时对WCF Windows / NTLM进行身份验证? 关于这个问题的任何其他想法/信息也是受欢迎的。

0 个答案:

没有答案