Apache和VB.net:无法读取STDIN

时间:2014-07-16 16:51:31

标签: vb.net windows apache stdin

我有一个非常奇怪的问题,我无法理解,我希望有人可以帮助我。

设置

我在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

可能原因

我总结说可能会发生以下两件事之一:

  1. Apache未将STDIN数据传递给VB。
  2. VB无法正确读取STDIN。
  3. 我还假设POST数据没有正确发送,但我在每个数据包嗅探时都排除了这一点。

    古怪的

    这就是它变得奇怪的地方:我编写了一个从STDIN读取的perl脚本,然后将数据传递给.exe,然后获取其输出并将其传回。换句话说,一个perl代理。当我使用这种方法时,问题就消失了。这可能意味着上述两个结论都不正确。

    帮助

    任何想法可能会发生什么?我很乐意提供所需的任何其他数据。

1 个答案:

答案 0 :(得分:0)

您可能遇到数据编码问题。您是否尝试将控制台的InputEncoding属性设置为ASCIIEncoding(为了将字符大小设置为1)?否则,您应断言输入数据被编码为默认的控制台编码。请注意,如果Console的当前编码与输入数据编码不匹配,则会因读取无效块中的数据而导致读取不稳定。当然,您还必须设置OutputEncoding