我有一个非常奇怪的问题,我无法理解,我希望有人可以帮助我。
我在Windows机器上运行Apache WebServer,我已对其进行配置,以便可以执行.exe文件(例如http://mydomain.com/program.exe)。 .exe是使用VB.net生成的。
当我向.exe发出POST请求时,.exe从STDIN读取数据,解析它,并采取相应的行动。这种方法很好。
有时,许多POST请求会非常接近(1-3秒内大约30个)。在这种情况下,有时一个请求会有问题。问题是STDIN中没有数据。
我在VB.net中使用以下代码来获取数据:
Public Shared Function getPostData() As String
Dim contentLength = Environ(CGI_CONTENT_LENGTH)
Dim buffer(contentLength - 1) As Char
Console.In.ReadBlock(buffer, 0, contentLength)
getPostData = New String(buffer)
End Function
发生错误时,Console.In.ReadBlock
的返回值为0,换句话说,STDIN中没有任何内容可供读取。
我已经使用其他函数来执行读取,Console.In.ReadToEnd,甚至方法here。
我总结说可能会发生以下两件事之一:
我还假设POST数据没有正确发送,但我在每个数据包嗅探时都排除了这一点。
这就是它变得奇怪的地方:我编写了一个从STDIN读取的perl脚本,然后将数据传递给.exe,然后获取其输出并将其传回。换句话说,一个perl代理。当我使用这种方法时,问题就消失了。这可能意味着上述两个结论都不正确。
任何想法可能会发生什么?我很乐意提供所需的任何其他数据。
答案 0 :(得分:0)
您可能遇到数据编码问题。您是否尝试将控制台的InputEncoding
属性设置为ASCIIEncoding
(为了将字符大小设置为1)?否则,您应断言输入数据被编码为默认的控制台编码。请注意,如果Console的当前编码与输入数据编码不匹配,则会因读取无效块中的数据而导致读取不稳定。当然,您还必须设置OutputEncoding
。