2013-10-31 2 views
1

이것은 모바일 응용 프로그램에 OData를 사용한 이후 가장 이상한 문제 중 하나입니다. 필자가 개발 한 OData 서버는 SQL Express 2008이 지원하며,이 조합은 지난 15 개월 동안 50 개의 다른 서버 및/또는 PC에 설치되었습니다. 50 대의 모든 서버는 대용량 데이터에 대해 일관된 기능으로 안정적으로 실행됩니다.OData HTTP400 시간 초과 오류

며칠 전 내 고객 중 한 명이 내 클라이언트 앱 (iOS7에서 실행 중임)에 데이터를 서버에 게시 할 때 이상한 오류가 발생했다는 사실을 알리는 연락을 받았습니다. 오류의 HTTP 코드는 400이고 오류 텍스트는 "작업을 완료 할 수 없습니다 (시간 초과 오류 400)"입니다. 내 첫 번째 질문은 : 왜 시간 초과 오류가 400 코드로 돌아가는 것입니까? 일반적으로 (방화벽 등으로 인해) 타임 아웃이 발생하면 100 배속입니다. 서버의 이벤트 로그에 문제가 발생했음을 나타내는 것은 없습니다. 내 자신의 로그 (SQL 데이터베이스에 저장) 오류를 보여줍니다 (어떤 Odd 서비스에 일반적인 예외 잡기 메서드를 사용하여 문제를 기록하기 때문에 이상합니다). 아직 모든 요청의 로깅을 추가하는 단계에 도달하지 못했습니다.

하나의 특정 데이터 세트를 게시 할 때만 오류가 발생합니다. 기기의 다른 모든 소식은 완벽하게 작동합니다. 클라이언트에 앱을 다시 설치하고 (모든 데이터 삭제) 오류가 발생한 데이터 세트를 다운로드합니다. 다운로드가 정상적으로 작동했습니다. 우리는 증분 변경에서 오류가 발생했을 때의 데이터를 복제하고 서버에 변경 사항을 게시 한 다음 결과를 관찰하기 위해 데이터를 변경하기 시작했습니다. 증분 변경의 대부분은 잘 작동하지만 특정 조합으로 인해 오류가 발생합니다. 증분 중 하나는 많은 양의 변경이 포함되어 있지만 글은 문제가되지 않지만 이후의 변경 (텍스트 필드에서 6 자 정도의 작은 문자 변경)으로 인해 오류가 발생합니다. 그리고 어떤 경우에는 이미 서버에 게시 된 객체를 변경해도 문제없이 작동합니다.

서비스 구성 요소를 서버에서 지우고 새로 설치합니다. 443이 다른 청취자가 문제를 일으키는 경우 TCP 포트를 이동했습니다. 나는 서버를 리셋했다. 이들 중 어느 것도 오류의 동작을 변경하지 않습니다.

내 마지막 도랑 솔루션은 IIS와 .NET Framework를 완전히 다시 설치하는 것이지만 내 서버가 아니기 때문에 분명히 이것을 피하고 싶습니다 ... 서버가 현재 위치에서 해외로 이동하므로 디버깅이 실제로 불가능합니다. 옵션. 누군가를 바라는 것은이 기괴한 '그렘린'의 근원을 진단하고 진단하기 위해 내가 진단 할 수있는 것에 대한 아이디어를 가지고 있습니다.

+0

나는 해결책이 없지만 절망하지 말라고 말할 수 있습니다. [모든 것]에 대한 설명이 있습니다 (http://mina.naguib.ca/blog/2012/10/22/the-little-ssh-that-sometimes-couldnt.html) (귀하의 문제는 매우 유사하고 매우 다른 것처럼 보입니다) . 로그에서 아무 것도 볼 수 없다는 사실은 꽤 낮은 수준이지만 원격 장치에서 HTTP 오류가 발생했다는 사실은 높은 수준임을 암시합니다. 매우 긴 샷 : 경로에서 DPI를 수행하는 라우터는 무엇입니까? 모든 HTTP 프록시 또는 역 프록시? – tne

답변

0

피들러 (Fiddler)와 같은 도구를 사용하여보다 철저한 트래픽 분석을 시도 했습니까? "timeout"오류는 실제로 이상하게 보입니다. 게시자가 게시 한 것은 서버가 "해외"였기 때문입니다. 사용 중이거나 생성 된 "시간"이있는 것이있을 수 있습니다 (예 : 서버 시간, 현지 시간 등?

"똑같은"정확한 데이터 세트는 항상 실패합니다. 원격 디버거 또는 localhost를 통해 이것을 복제 할 수 있습니까? 그렇다면 "자세한 오류"를 켤 수 있습니까?

+0

혼란에 사과드립니다. 운영체제 인 서버에 관한 논평은 그것이 내가있는 곳에서 해외로 나가는 것이었다. 클라이언트 앱과 서버는 동일한 WiFi 네트워크에 함께 배치됩니다. –

+0

필자는 개발을 위해 Fiddler2를 사용해 왔지만 아웃 바운드 패킷과 응답을 성공적으로 캡처 한 적이있었습니다. '인바운드 패킷을 캡처하는 바이올린을 설정하는 방법'에 대한 훌륭한 자습서가 있습니까? –