2014-09-24 1 views
0

모든 데이터 액세스에 RemoteObject 호출을 사용하는 프로덕션 모바일 Flex 응용 프로그램이 있습니다. 방금 추가 한 새로운 원격 호출을 제외하고는 잘 작동합니다. 릴리스 빌드로 실행할 때만 실패합니다. 동일한 호출이 디버그 빌드를 사용하여 장치 (iPhone)에서 실행될 때 정상적으로 작동합니다. 릴리스 빌드를 사용하여 실행하면 결과 핸들러가 호출되지 않으며 (오류 핸들러도 호출되지 않음) BlazeDS 로그를 디버그 모드에서 보면 호출이 수신되어 데이터로 되돌려 보내집니다. 나는 그것을 데이터 크기 문제로 보이는 것으로 좁혔다.Flex 원격 객체 호출 (BlazeDS)의 경우 반환되는 객체에 크기 제한이 있습니까?

문자열 값에서 문자열 길이가 44kb로 반환되는 특정 데이터 호출을 대상으로했습니다 (빌드가 실패합니다). 객체의 문자열 값 (서버 측 Java 코드에서)을 채우지 않으면 (빈 문자열 만 설정하면) 결과 핸들러가 호출되고 릴리스 빌드를 사용하여 객체가 다시 반환됩니다. 이것은 디버그 빌드에서 작동합니다.

호출에서 반환되는 사용자 정의 객체는 간단한 유형 boolean, int, String 및 하나의 org.23c.dom.Document 유형에 대한 getters/setter와 함께 매우 단순한 객체입니다. 이 같은 객체 유형은 다른 다른 RemoteObject 호출 (다른 데이터)에서 사용되며 잘 작동합니다 (릴리스 및 디버그 빌드). 원래 Document로 반환했지만 문제가 아닌지 확인하기 위해 문자열로 반환 할 값을 변경하여 직렬화에서 XML/Dom 문제를 제외했습니다.

1) 릴리스 빌드와 디버그 빌드 비헤이비어가 RemoteObject 호출과 다른 이유 2) 디버그 빌드에서 호출이 다소 큰 (그러나 부당하지 않은) 양을 보낼 때 왜 작동하는지 2) String 객체의 데이터 (릴리스 빌드가 아님)

오류 지점의 크기를 정확히 알아 내려고했지만, 44KB가 예상치 못한 크기가 아니기 때문에 관련성이 있는지 확실하지 않았습니다.

BlazeDS에서 디버그 모드를 켜면 객체를 볼 수 있으며 속성이 직렬화되고 모든 것이 잘 보입니다. 호출은 디버그 및 릴리스 빌드 테스트를 위해 BlazeDS에서 적절하게 수신되고 처리됩니다.

누구나 디버그/해결하려고하는 다른 아이디어가 있습니까?

플랫폼 테스트는 BlazeDS 4, Flashbuilder 4.7, Websphere 8 서버, iPhone (iOS 7.1.2)입니다. 동작에 변화가없는 다중 Flex SDK 4.12를 최신 4.13으로 사용해 보았습니다.

감사합니다.

+1

타이밍 문제 일 수 있습니까? Mayb는 프로덕션 서버의 타임 아웃 설정이 더 엄격합니다. –

+0

코드에서 오류 처리기를 처리하면 서비스에 무엇이 잘못되었는지 표시 할 수 있습니다. 나는 너무 제한된 시간에 뿌리를 내리고있다. 나는 전에 거대한 원격 객체를 표시했다. 일반적으로 약 10k-30k 행 등 – Zeus

+0

실제로는 같은 서버이다. 오늘 아침, 일주일 분량의 디버깅을 마친 후 문제가 발견되었습니다. 호출에서 반환 된 Java 유형이 ArrayList로 정의되었습니다. 목록으로 변경하면 문제가 해결되었습니다. 왜 ArrayList가 유효한 반환 유형이 아닌지 잘 모르겠다. Adobe 문서를보고 있었지만 여전히 유효하지 않은 이유는 여전히 알 수 없다. 그리고 디버그 모드에서 작동하고 릴리스 빌드에서 작동하지 않는 이유는 낯선 것입니다. 어쩌면 누군가가 나에게 논리를 밝힐 수 있습니다. – DavidW

답변

0

일주일에 한 번 디버깅을 한 후에 문제가 발견되었습니다.

호출에서 리턴 된 Java 유형이 ArrayList로 정의되었습니다. 목록으로 변경하면 문제가 해결되었습니다.

왜 ArrayList가 유효한 반환 유형이 아닌지 잘 모르겠지만 어도비 문서를보고 있었지만 왜 이것이 유효하지 않은지 아직 알 수 없습니다. 그리고 디버그 모드에서 작동하고 릴리스 빌드에서 작동하지 않는 이유는 낯선 것입니다. 어쩌면 누군가가 나에게 논리를 밝힐 수 있습니다.

관련 문제