2014-07-16 2 views
0

나는 정말로 이해할 수없는 이상한 문제가있다. 나는 누군가가 나를 도울 수 있기를 바라고있다.아파치와 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이라는 접근법을 사용했습니다.

  1. 아파치가 VB로 STDIN 데이터를 전달되지 않습니다

    추적 할 수없는 가망 나는 두 가지 중 하나가 발생 할 수 있다는 결론을 내렸다

    하도록합니다.

  2. VB에서 STDIN을 올바르게 읽을 수 없습니다.

나는 또한 POST 데이터가 올바르게 전송되지 않았다고 생각했지만, 나는 패킷 스니핑 당 이것을 배제했다. 이 이상한 얻는 경우 여기

이상한

이다 : 나는 STDIN에서 읽은 다음 파이프 데이터를 한 .exe로하고 그 출력을 받아 다시 전달하는 펄 스크립트를 썼습니다. 즉, 펄 프록시. 이 방법을 사용할 때 문제는 사라집니다. 위의 두 결론 중 어느 것도 맞지 않다는 것을 의미합니다.

도움말

어떤 아이디어가있을 수 있습니까? 필요한 추가 데이터를 제공해 드리겠습니다.

+0

Apache에서 EXE를 어떤 방식으로 실행합니까? CGI 스크립트 요? 아니면 다른 방법일까요? – Styxxy

+0

수정하십시오. CGI로. httpd.conf에'AddHandler cgi-script .pl .cgi .exe'를 추가했습니다. – Rob

+0

http://support.microsoft.com/kb/239588 –

답변

0

데이터 인코딩에 문제가있을 수 있습니다. 콘솔의 InputEncoding 속성을 (문자 크기를 1로 설정하기 위해) ASCIIEncoding으로 설정하려고 했습니까? 그렇지 않으면 입력 데이터가 기본 콘솔의 인코딩으로 인코딩된다는 것을 주장해야합니다. 콘솔의 현재 인코딩이 입력 데이터 인코딩과 일치하지 않으면 잘못된 청크에서 데이터를 읽음으로써 엉뚱한 읽기가 발생합니다. 물론 OutputEncoding도 설정해야합니다.

+0

감사합니다. 나는 이것을 시도 할 것이다. 그러나, 이것이 문제라면, 나는 그것을 단지 산발적으로 볼 것이고, 항상 볼 수는 없다는 것이 당신에게 의미가 있습니까? 현상금이 만료되었지만,이 현상금이 지급되는지 여부와 관계없이 당신에게 수여 할 것입니다. – Rob

+0

수상 경력에 대해 걱정하지 마시고 문제에 관해서는 걱정하지 마십시오. 사실 이상하고 나는 100 % 확신 할 수 없지만 과거에는 인코딩 문제에 직면 해 있으며 증상은 비슷합니다. 일부 읽기는 정상이며 다른 하나는 실패합니다. 시도해보고 보자 ... – Claudix

관련 문제