我在使用HttpWebRequest对嵌入式设备上的HTTP守护进程时遇到问题。问题似乎是,在写入到套接字流的http头文件和http有效内容(POST)之间存在足够的延迟,即套接字将套接字缓冲区中的内容释放到服务器。这导致HTTP请求被分成两个分组(分片)。如何防止HttpWebRequest的数据包碎片
当然,这是完全有效的,但是如果数据包被拆分超过大约1.8ms,那么服务器的另一端就无法处理它。所以我想知道是否有任何现实的方法来控制这个(在客户端)。
在HttpWebRequest上没有任何属性可以控制用于发送的套接字,并且不能访问套接字本身(即通过反射),因为它只是在创建期间创建的发送,然后发布(作为出站http连接池的一部分)。 BufferWriteStream属性只是缓存webrequest中的正文内容(所以它仍然可用于重定向等),并且不会影响整个请求写入套接字的方式。
那该怎么办?
(我真的想避免从插座高达重写HTTP客户端)
一种选择可能是写某种的HttpWebRequest的发送给代理的(也许通过的ServicePoint) ,并在该实现中缓冲整个TCP请求。但是这似乎是一项艰苦的工作。
当我跑步时Fidder酒店(出于同样的原因),但不是真正的在我们的生产环境中的选项,也能正常工作......
[PS:我知道这是肯定的零碎数据包之间的时间间隔这是问题所在,因为我敲了一个套接字级测试,在那里我使用NoDelay套接字明确控制了分段]
你做到完美努力理解这个问题。你唯一忘记的是服务器。它的行为是不正常的,它必须在超时间隔(大约20-100秒)内接收所有的数据包。因为它是一个RFC标准。有没有可能修复服务器? – 2010-02-05 12:20:03
我已经问设备供应商这个问题,但作为一个嵌入式设备,我怀疑这可能会变得复杂,这就是为什么我试图找到客户端修补程序。 – piers7 2010-02-07 14:11:27