Frage

ich habe ein Problem mit einer Delphi-Anwendung auf einigen Windows 2003-Servern. Es verwendet einen Webservice-Aufruf mit einem anderen Server und Sendedaten hin und her zu verbinden. Sobald die App auf die Methode Authentifizieren bekommt, die App stirbt. Die App ist seit Jahren auf frühere Boxen mit Win Server 2003 gearbeitet, aber es funktioniert nicht auf frisch Maschinen gebaut. Die Maschinen werden auf die gleiche Art und Weise zum größten Teil festgelegt, aber es ist eindeutig einige Config unterscheidet sich einstellen, dass ich nicht in der Lage bin unten zu verfolgen. Auch während der Fehler in dem Aufruf von Authentifizieren offensichtlich wird, Packet Sniffing beweist, dass nichts jemals zwischen der App und dem Server geschieht es, um einen Kontakt versucht, die meine Gedanken verstärkt, dass etwas dieing früh in den Verbindungsaufbau. Ich kann den Fehler nicht lokal duplizieren, so dass ich auch nicht über die App in einem Debugger Schritt kann. Irgendwelche Gedanken auf, warum ein Indy 9 Delphi Web-Verbindung unbemerkt fehlschlagen könnte?

War es hilfreich?

Lösung

Hier, wo es wurde Sprengung:

MySoapObject := GetNewSoapObject(usewsdl, addr, FHTTPRIO);  
 ...   
if MySoapObject <> nil then   
  MySoapObject.SomeFunction(); // BOOM! Access Violation here.

gefunden Lösung! Es stellte sich heraus DEP (Data Execution Prevention) zu sein. Als ich wieder gebaut unseren Code mit Delphi2007 Seife Bibliotheken, ging der probelm entfernt. Da ich nicht, dass (de-Serialisierung verursacht Probleme, die die Server-Drossel auf unserer XML gemacht) zu tun haben will, und meine Mgr wirklich wollte nicht, dass (beteiligt umfangreiche Regressionstests) tun, sah ich für Unterschiede zwischen dem SOAP Quellcode zwischen D2005 und D2007, mit der Idee, eine gezielte Veränderung der Herstellung auf, was war anders zwischen den beiden. d.h findet den Unterschied, der einen Unterschied macht. Beyond Compare hier mein Kumpel war. Eine Änderung Art steht als merkwürdig zu sein - die RIO.PAS enthält nun eine neue Einheit PrivateHeap.pas. Sie fragen sich, warum ich gegoogelt und fand ein ähnliches Problem mit einer Erklärung, die direkt am Ziel zu sein schien.

  

Das DEP Problem ist im Grunde, dass   mit Windows XP Service Pack starten   2, , wenn Ihre Hardware ist in der Lage ,   Windows wird die Ausführung von Code verhindern   aus nicht-ausführbaren Speicher.   Leider Laufzeit der Delphi SOAP   schafft eine Reihe von Thunks und die   Speicher für diese zugeordnet waren nicht   gekennzeichnet ausführbar. Also, wenn das OS   Update wurde auf der Lage freigegeben   Hardware, dann würden Sie einen AV erhalten, wenn   Aufrufen eines Verfahrens durch eine RIO backed   Komponente . Dieses Problem wurde angesprochen in   ein Update mit der PrivateHeap Einheit.
  - Jean-Marie Babet
       http://delphigroups.info/2/11/344230.html

Bingo! Jetzt ist hier, wo es schwierig wird. Die DEP hat immer auf unseren Servern aktiviert. So zunächst, dies schien es nicht wahrscheinlich war. Aber DEP ist schwierig, und neuere Hardware ist besser in der Lage als die ältere Hardware. Deshalb denke ich, haben wir mit DEP Probleme in der Vergangenheit weg, und nun die neuere Hardware uns oben ist Auslösung. Unser Server Admin blätterte DEP Schutz ab (für 3rd-Party-Anwendungen), neu gestartet und unser alter Code gearbeitet! Während wir uns schließlich auf die neueren Bibliotheken bewegen werden, wird dies eine große kurzfristige Lösung für uns sein, da es uns diese App zu Regressionstests vermeiden, dass die feinen sonst funktioniert.

Um es zusammenzufassen: Unsere Delphi2005 App wurde Absturz auf neu gebauten Windows2003-Server aufgrund von Data Execution Prevention (DEP) mit der Schaffung des HTTPRio Objekt zu stören. Die RIO wäre ohne Ausnahme geschaffen werden, erschien gültig. Aber wenn das zugehörige IInvokable Objekt verwendet wurde, wäre es eine Zugriffsverletzung, vor dem Versuch wirft auf dem Draht überhaupt zu kommunizieren. Ein großes Lob an unsere kooperative und sehr geduldig admins, fellow dev Mcmar, Beyond Compare und Jean-Marie Babet.

Andere Tipps

Könnte es die Firewall verursacht Probleme auf 2003 sein?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top