일부 Windows 2003 서버에서 Delphi 응용 프로그램에 문제가 있습니다. 그것은 webservice 호출을 사용하여 다른 서버와 연결하고 앞뒤로 데이터를 전송합니다. 앱이 Authenticate 메소드를 얻 자마자 앱이 종료됩니다. 이 응용 프로그램은 Windows Server 2003을 사용하여 이전 상자에서 수년 동안 사용해 왔지만 새로 만든 컴퓨터에서는 사용하지 않았습니다. 기계는 대부분 같은 방식으로 설정되어 있지만 추적 할 수없는 점이 분명히있는 구성 설정이 있습니다. 또한 Authenticate에 대한 호출에서 오류가 명백 해지는 동안 패킷 스니핑은 연결하려고하는 서버와 앱 사이에서 아무런 일도 일어나지 않음을 증명합니다. 따라서 연결을 설정하는 과정에서 초기에 뭔가 문제가 있다는 생각이 강해집니다. 로컬로 오류를 복제 할 수 없기 때문에 디버거에서 앱을 단계적으로 실행할 수 없습니다. Indy 9 Delphi 웹 연결이 자동으로 실패하는 이유에 대한 의견이 있으십니까?Indy 9와 Windows Server 2003 간의 비 호환성?
답변
은 다음과 같습니다
MySoapObject := GetNewSoapObject(usewsdl, addr, FHTTPRIO);
...
if MySoapObject <> nil then
MySoapObject.SomeFunction(); // BOOM! Access Violation here.
솔루션이 발견! 그것은 DEP (Data Execution Prevention)로 밝혀졌습니다. Delphi2007 비누 라이브러리로 코드를 재 작성하면 문제가 사라졌습니다. 내가 그것을하고 싶지 않았기 때문에 (직렬화가 서버를 XML에 질식시키는 문제를 일으켰다), 내 관리자는 실제로 그렇게하지 않기를 원했고 (대규모 회귀 테스트 포함), SOAP 소스 코드는 D2005와 D2007 사이에서, 둘 사이에 다른 점이 무엇이든간에 대상을 변경하는 아이디어가 포함되어 있습니다. 즉 차이를 만드는 차이를 찾습니다. Beyond Compare 여기 내 친구였습니다. RIO.PAS에는 새로운 유닛 인 PrivateHeap.pas가 포함되어 있습니다. 궁금해하는 이유는, 내가 봤 거든 비슷한 대상에 옳은 것 같은 설명과 함께 문제를 발견.
DEP 문제는 하드웨어가, Windows가 비 실행 메모리에서 코드 의 실행을 방지 할 수있는 경우 Windows XP 서비스 팩 2, 로 시작하는 것이 기본적이다. 불행하게도 델파이 SOAP 런타임 은 많은 썽크를 만들고 이것들에 할당 된 메모리는 실행 파일로 표시되지 않았습니다. 따라서 OS 업데이트가 가능한 하드웨어에서 출시되면 구성 요소으로 백업 된 메서드를 호출하면 AV가 표시됩니다. 이 문제점은 PrivateHeap 유닛의 업데이트 인 에서 해결되었습니다.
- 장 - 마리 Babet
http://delphigroups.info/2/11/344230.html
빙고! 이제 여기가 까다로워집니다. DEP는 Google 서버에서 항상 사용하도록 설정되었습니다. 그래서 처음에는 이것이 가능성이없는 것처럼 보였습니다. 그러나 DEP는 까다 롭고 새로운 하드웨어는 이전 하드웨어보다 더 유능합니다. 그래서 우리는 과거에 DEP 문제로 빠져 나갔다고 생각합니다. 이제는 새로운 하드웨어가 우리를 트립시킵니다. 서버 관리자가 DEP 보호를 해제하고 (타사 응용 프로그램 용) 재부팅 한 다음 이전 코드가 작동했습니다! 우리는 결국 새로운 라이브러리로 옮겨 가겠지 만, 그렇지 않으면 잘 작동하는이 앱을 회귀 테스트 할 필요가 없기 때문에 이것은 우리에게 훌륭한 단기적인 해결책이 될 것입니다.
요약 : Delphi2005 응용 프로그램은 DEP (데이터 실행 방지)가 HTTPRIO 개체 생성을 방해하여 새로 생성 된 Windows2003 서버에서 충돌했습니다. RIO는 예외없이 생성되며 유효합니다.그러나 연결된 IInvokable 객체가 사용되면 전선에서 통신을 시도하기 전에 액세스 위반이 발생합니다. 우리의 협조적이고 매우 참을성있는 관리자, 동료 개발자 Mcmar, Beyond Compare 및 Jean-Marie Babet에게 감사드립니다.
방화벽이 2003 문제를 일으킬 수 있습니까? 이 폭파 된 곳
"앱이 죽는다"는 것은 무엇을 의미합니까? 특정 세부 사항을 제공 할 수 있습니까? 오류가 있습니까? 어쩌면 예외를 제기 할 수 있습니까? –
마이크, Indy를 삭제하려면 질문을 수정/수정하십시오. 아마도 제목은 "Delphi2005 SOAP 애플리케이션은 HTTPRIO가 호출 될 때 죽습니다 (SOLVED - DEP 문제)." –