NAV 2009 R2 Webservice teilweise nicht erreichbar

14. September 2015 16:38

Guten Tag,

ich habe ein Problem mit dem NAV 2009 R2 Webservice, das mich langsam die letzten Nerven kostet. Vielleicht kann mir hier jemand helfen:
Ich habe seit einiger Zeit den Webservice in Betrieb und rufe über PHP einige Daten ab. (http://blogs.msdn.com/b/freddyk/archive ... m-php.aspx)
Das funktioniert soweit ganz gut und auch schnell.
Jedoch kommt es mehrmals am Tag vor, dass der Webservice einfach nicht erreichbar ist:
SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://sqlserver:7047/DynamicsNAV/WS/[Mandant]/Codeunit/MYWebservice' : failed to load external entity
Dieses Phänomen lässt sich aber weder zeitlich eingrenzen noch gezielt reproduzieren; es betrifft nicht nur eine Funktion in der Codeunit sondern alle.
Was ich bereits versucht habe:
- Dienste Neustart
- kompletter Serverneustart
- Neu kompilieren der Webservice Codeunit
- Löschen des Object Meta Eintrags und neu kompilieren
- neusten Hotfix installiert
- Timeout in PHP erhöht
- Service Tracelog mitlaufen lassen (Ich konnte daraus kein Anzeichen für die Fehlfunktion erkennen)
- ClientReconnectPeriod auf 5 und MaxNumberOfOrphanedConnections auf 1 gesetzt (aus Mangel einer besseren Idee)

Hat jemand noch einen Tipp für mich?

Re: NAV 2009 R2 Webservice teilweise nicht erreichbar

15. September 2015 09:42

PMP161316 hat geschrieben:...Hat jemand noch einen Tipp für mich?

Ich denke die einfachste und günstigste (weil deine Arbeitszeit gespart) wäre einen Microsoft Supportfall zu eröffnen.

Re: NAV 2009 R2 Webservice teilweise nicht erreichbar

16. September 2015 09:17

Habe in anderem Szenario (ohne Navision) das gleiche Verhalten mit dieser Fehlermeldung (PHP CRM mit PHP Onlineshop).

SOAP-ERROR: Parsing WSDL:
Couldn't load from 'https://www.sampleshop.com/index.php/api/v2_soap/index/?wsdl=1' :
failed to load external entity "https://www.sampleshop.com/index.php/api/v2_soap/index/?wsdl=1"

In einer wsdl.xml Datei steht
<import namespace="http://schemas.xmlsoap.org/soap/encoding/" schemaLocation="http://schemas.xmlsoap.org/soap/encoding/" />

Wenn die encoding Datei von dieser schemaLocation nicht erreichbar ist bzw. nicht innerhalb des Timeouts antwortet funktioniert der Webservice nicht.

Es gibt einen (nicht schönen) Workaround diese Datei lokal vorzuhalten und mit schemLocation darauf zu verweisen. (... der Webservice funktioniert dann immer ... ist dann aber nicht automatisch die aktuelle Version)

Vielleicht hilft diese Info bei der Lösung.

In meiner Anwendung funktioniert es jetzt:
Die Adresse der schemaLocation mit Webbrowser aufrufen, die XML Antwort im Browser in Datei encondig.xsd speichern und z. B. in das root Webverzeichnis legen.

Die schemaLocation in allen Aufrufen ändern in
<import namespace="http://schemas.xmlsoap.org/soap/encoding/" schemaLocation="../../../../encoding.xsd" />
(relativer Pfad je nach Aufrufparameter in meinem Beispiel 4 Verzeichnisse höher um den Aufruf im root Webverzeichnis zu machen).
Ergänzung: Der hier beschriebene Fehler trat nur bei Remote Aufrufen von einem anderen Server auf, das gleiche php Skript auf dem Webserver hatte schon immer funktioniert.