2016-08-30 8 views
1

저는 ColdFusion에서 20 년 동안 일해 왔으며 지금까지 본 적이 없습니다. 나는 프론트 엔드 웹 페이지를 끌어 당기고 백 엔드 코드를 이벤트 게이트웨이를 통해 실행하는 ContentBox 사이트 (문제에 영향을 미치지 않는다고 생각하지만 정보를 포함하고 싶다)가 있습니다. 1 분마다 약 30 건의 게이트웨이 이벤트가 수신됩니다. 내 문제는 프런트 엔드 웹 페이지가 실행될 때 (일반적으로 데이터베이스에서 데이터를 가져 오는) 중간 루틴이 사라지는 변수가 있다는 것입니다.ColdFusion 변수가 없습니다.

ContenBox/ColdBox 모듈 디렉토리에 abort 명령이 포함 된 Application.cfcs가 있기 때문에 게이트웨이 이벤트 cfc는 응용 프로그램 루트 바로 아래에있는 하위 폴더에 있습니다 (게이트웨이 cfc 또는 Application.cfc의 모든 중단이 게이트웨이 오류).

코드의 오류 지점이 계속 변경됩니다.

for(var structKey in structureName) 
{ 
    var structValue = structureName[structKey]; 
} 

다른 시간 코드가 다시 응용 프로그램 범위에 구조를 참조하고, 이전 몇 줄은 이제없는 존재하는 키를 : 때때로 구조의 키 전체를 반복하는 동안 구조의 키가되는 아니다 오류가 발생했습니다. 따라서 다양한 변수 범위 (변수, 응용 프로그램 등)가 웹 페이지가 처리되는 동안 (게이트웨이 이벤트가 처리되는 동안 종종 발생하는) 값을 잃어 버리는 것 같습니다.

웹 서버가 안전하게 보호되어 있으며 보안되지 않은 dev/staging에 문제가 없습니다. 따라서 내 본능은 보안 문제로이 문제를 일으키는 것입니다. 로그에서 문제를 지적 할만한 것을 본 적이 없습니다.

계약 상 의무로 인해 여기에 코드를 게시 할 수 없습니다. 즉,이 설명은 문제가 CF 코드가 아니라 서버의 보안 강화라는 아이디어에 도움이된다고 생각합니다.

어떤 아이디어가 CF 응용 프로그램에서 중간 스트림을 잃을 수있는 아이디어가 있습니까?

+2

경쟁 조건 일 수 있습니다. 변수의 범위를 지정하고 있습니까? 이에 대한 설명은 http://stackoverflow.com/q/19859690/1636917 및 http://stackoverflow.com/q/36942015/1636917 및 http://stackoverflow.com/q/27408067/1636917을 참조하십시오. –

+0

* 경쟁 조건 * 일 수 있습니다 ... 특히 경쟁 조건의 고전적인 증상 인 오류의 산발적 인 특성을 고려할 때. 일반적으로 부하시에만 나타납니다. – Leigh

+0

나는 그것이 경쟁 조건이 아니라고 확신한다. 소켓 게이트웨이 이벤트를 별도의 응용 프로그램에 넣도록 코드를 변경했는데 이제는 내 유일한 문제는 응용 프로그램 범위에없는 기존 변수를 참조하는 것입니다. 위에서 언급 한 것처럼 종종 구조체의 키를 반복합니다. 루프를 만들 때 항상 var를 사용합니다 (게시물의 원본 코드는 편집하지 않습니다 ...). 나는 특히 범위 (예 : variables.this [ "that"], 등)에 따라 변수를 호출하고 있습니다. –

답변

1

문제가 해결되었습니다. 경쟁 조건이 합리적으로 들렸을 때, 나는 하나의 스레드에서 그러한 간결한 루프 내에서 어떻게 일어날 수 있는지 보지 못했습니다. 그러나 그것은 참으로 경쟁 조건이었습니다. 문제는 코드가 ColdBox 핸들러에 있다는 사실에서 기인합니다. 이 경우 Wirebox의 사용법을 오해했습니다. 핸들러를 호출하면 핸들러의 캐시 된 싱글 톤의 개별 인스턴스를 생성 할 수 있다고 생각했습니다. 대신 모든 전화는 동일한 인스턴스!을 사용합니다. 이것은 핸들러의 각 호출이 변수 범위를 다른 동시 호출과 공유한다는 것을 의미합니다. 이것이 변수가 덮어 쓰이는 방식입니다.

20 년 동안 ColdFusion을 사용했지만 ColdBox와 ContentBox를 사용하여 처음으로 프로젝트를 작성하십시오. C'est la vie.

관련 문제