2008-11-04 2 views
59

win32 (C#) 응용 프로그램이 웹 서비스를 호출 할 때 다음과 같은 오류가 발생합니다.HTTP 상태 504

The request failed with HTTP status 504: Gateway timeout server response timeout. 

나는 업스트림 요청이 적시에 응답을받지 못하기 때문에 '이것이 내 생각'이라고 생각합니다.

하지만 제 질문은 이것입니까? Win32 응용 프로그램에서 app.config 설정을 변경하여 데이터를 처리하는 데 더 많은 시간을 허용하려면 어떻게합니까? 나는 webservices와 IIS를 호스팅하는 IIS가 확장 된 시간으로 설정되기 때문에 이러한 변경 사항을 내 앱 설정에 적용해야한다고 가정합니다.

미리 답변 해 주셔서 감사합니다.

스콧

답변

18

CheckUpDown는 a nice explanation of the 504 error 있습니다

는 서버 (반드시 웹 서버) 게이트웨이 나 프록시 역할을

(예 : 웹 브라우저 또는 우리의 CheckUpDown을 클라이언트의 요청을 이행하기 위해 로봇)을 사용하여 요청 된 URL에 액세스합니다. 이 서버는 HTTP 요청을 처리하기 위해 액세스 한 업스트림 서버로부터시기 적절한 응답을받지 못했습니다.

이것은 대개 업스트림 서버와 게이트웨이/프록시가 데이터 교환 프로토콜에 동의하지 않고 업스트림 서버가 다운되었음을 나타냅니다 (게이트웨이/프록시에 응답 없음).

이 문제는 전적으로 웹 서버를 포함한 백 엔드 컴퓨터 간의 IP 통신 속도가 느려서 발생합니다. 웹 서버를 호스팅하는 사이트에서 네트워크를 설정 한 사람 만이이 문제를 해결할 수 있습니다.

41

수 없습니다. 문제는 앱이 참을성이 없어서 시간을 초과한다는 것만은 아닙니다. 문제는 중간 프록시가 참을성이 없어서 시간을 초과한다는 것입니다. "게이트웨이 나 프록시 역할을하는 서버는 URI로 지정된 업스트림 서버로부터 적시에 응답을받지 못했습니다." (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.5) 대부분 원 서버에 문제가 발생했기 때문에 전달 된 요청에 신속하게 응답하지 않습니다. (그것이 당신의 통제의 경우) 서로가 있다면

  • 는 (다른 서버로 요청을 프록시의

    • 증가 시간 초과 값 : 당신을 행복하게 할 가능성이 어느 것도

      가능한 솔루션 서버가 문제

    을 가지고 있지되면 다른 요청을 확인
  • 같은 데이터 서버) (가능한 경우) 한 번에 적은 데이터를 요청하도록
  • 다시 시도
  • +0

    같은 문제가 발생했지만 '아파치'와 '톰캣'을 다시 시작하면이 문제가 해결되었습니다. 즉, 웹 서버라고 가정하는 '원본 서버'가 HTTP 요청을 처리하는 데 너무 느리다는 뜻입니까? –

    +5

    원본 서버 (데이터가있는 웹 서버)가 프록시 (사용자를 대신하여 원본 서버에 액세스하려고 시도하는 중간 서버)에 비해 너무 느리다는 의미입니다. –

    1

    ASP.Net 5 (현재는 ASP.Net Core v1이라고 함)를 사용하는 경우 호스팅하는 각 사이트의 project.json "명령"섹션에서 Kestrel 프록시 수신 대기 포트가 사이트마다 다르다는 것을 확인하십시오. 그렇지 않으면 하나의 사이트는 작동하지만 다른 사이트는 504 게이트웨이 시간 초과를 리턴합니다.나는이 오류에 대한 관찰

    "commands": { 
        "web": "Microsoft.AspNet.Server.Kestrel --server.urls http://localhost:5090" 
        }, 
    
    1

    한 점은 단지 HTTP의 경우 핸드 쉐이크 응답해야하는 서버에서 첫 번째 응답을 표시입니다. 서버에서 게이트웨이로 즉각적인 응답을 보내면 주 응답 후에 시간이 걸리면 오류가 발생하지 않습니다. 여기서 핵심은 서버의 요청에 대한 첫 번째 응답이 빠릅니다.

    2

    프록시 서버 A (예 : nginx)에 액세스하고 서버 A가 다른 서버 B (예 : tomcat)에 요청을 전달한다고 가정합니다.

    이 프로세스가 오랜 시간 지속되면 (프록시 서버 읽기 시간 초과 설정) A는 여전히 B의 완료 응답을 얻지 못했습니다. 발생합니다.

    nginx의 경우 proxy_read_timeout (in location) 속성을 구성하여 해결할 수 있습니다. 그러나 값을 너무 높게 설정하면 대개 좋은 생각이 아닙니다. 이렇게하면 실제 오류를 숨길 수 있습니다.이 문제를 해결하기 위해 디자인을 개선하는 것이 좋습니다.