나는 정말로 이해할 수없는 이상한 문제가있다. 나는 누군가가 나를 도울 수 있기를 바라고있다.아파치와 VB.net : STDIN을 읽을 수 없다
설정
내가 윈도우 상자에 아파치 웹 서버를 실행하고, 그리고 .exe 파일이 실행 될 수 있도록 내가 설정 한 (예를 들어, http://mydomain.com/program.exe). .exe는 VB.net을 사용하여 생성됩니다.
나는 .EXE에 POST 요청을 이상적인 실행
은 .EXE 그것을 구문 분석, STDIN에서 데이터를 읽고, 그에 따라 역할을합니다. 이 접근법은 잘 작동합니다.
오류 조건
때때로 많은 POST 요청은 매우 가깝게 (약 30 ~ 3 초)에서 올 것이다. 이 조건 하에서 때때로 하나의 요청이 문제가됩니다. 문제는 STDIN에 데이터가 없다는 것입니다. 즉,
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 :
실패 디버깅 접근 방법은 지금까지
는나는 데이터를 얻을 수 VB.net에서 다음 코드를 사용하여 , 읽을 STDIN 아무것도 없습니다.
나는 다른 기능을 사용하여 Console.In.ReadToEnd 또는 심지어 here이라는 접근법을 사용했습니다.
- 아파치가 VB로 STDIN 데이터를 전달되지 않습니다
추적 할 수없는 가망 나는 두 가지 중 하나가 발생 할 수 있다는 결론을 내렸다
하도록합니다.
- VB에서 STDIN을 올바르게 읽을 수 없습니다.
나는 또한 POST 데이터가 올바르게 전송되지 않았다고 생각했지만, 나는 패킷 스니핑 당 이것을 배제했다. 이 이상한 얻는 경우 여기
이상한
이다 : 나는 STDIN에서 읽은 다음 파이프 데이터를 한 .exe로하고 그 출력을 받아 다시 전달하는 펄 스크립트를 썼습니다. 즉, 펄 프록시. 이 방법을 사용할 때 문제는 사라집니다. 위의 두 결론 중 어느 것도 맞지 않다는 것을 의미합니다.
도움말
어떤 아이디어가있을 수 있습니까? 필요한 추가 데이터를 제공해 드리겠습니다.
Apache에서 EXE를 어떤 방식으로 실행합니까? CGI 스크립트 요? 아니면 다른 방법일까요? – Styxxy
수정하십시오. CGI로. httpd.conf에'AddHandler cgi-script .pl .cgi .exe'를 추가했습니다. – Rob
http://support.microsoft.com/kb/239588 –