Webservice konsumieren - authentifizierungsprobleme

9. September 2009 09:07

hallo,
ich teste gerade ein wenig mit den webservices rum und stehe vor einem seltsamen problem.

ausgangssituation ist die folgende:
- auf einem server ist nav 2009 sp1 installiert, webservice dienst läuft unter dem network user
- über den classic client habe ich die page "auftrag" freigegeben

url für den aufruf:
Code:
http://x.x.x.x:7074/MicrosoftDynamicsNAVServer/WS/Testfirma/Page/Auftrag


ergebnis auf meinem client rechner ist:
- gebe ich diese in den internet explorer ein, authentifiziere ich mich mit einem gültigen nav benutzer und ich sehe die webservice definition
- gebe ich diese in den firefox ein, sehe ich eine weiße seite, auth erscheint nicht mal
- will ich mit dieser eine web reference im visual studio erstellen, bekomme ich nach der authentifizierung einen fehler "The request failed with HTTP status 400: Bad Request." und ich kann den webservice nicht hinzufügen und nutzen
- gebe ich diese in infopath ein, scheint es als funktioniert der auth nicht, da nach eingabe circa 5x die abfrage neu erscheint, anschließend es aber weitergeht und so aussieht als dass ich den webservice erreichen kann

4 arten, jedes mal eine andere reaktion? ist das normal?
mich interessiert vor allem der zugriff aus dem visual studio auf einen webservice! eine nutzung von webservices ist nämlich eigentlich ziemlich einfach über die web references, aber mit einem nav-webservice funktioniert es einfach nicht. gibt es anleitungen? liegt das problem bei der authentifizierung? viel "konfigurieren" kann man ja bei den nav-webservices nicht. :-/


grüße,
daniel

Re: Webservice konsumieren - authentifizierungsprobleme

11. September 2009 18:30

dr hat geschrieben:url für den aufruf:
Code: Alles auswählen
http://x.x.x.x:7074/MicrosoftDynamicsNA ... ge/Auftrag


1. Es heißt wirklich Testfirma? Keine Leerzeichen oder Umlaute im Namen?
2. Dein Portangabe 7074 ist korrekt? Standard ist eigentlich 7047.
3. WebServicesUseNTLMAuthentication = false?
4. Entsprechende Rechte an den Network-Account in NAV erteilt?

Volker

Re: Webservice konsumieren - authentifizierungsprobleme

17. September 2009 11:26

1) ja ich hab nen testmandanten der so heißt. im ie seh ichs ja auch korrekt
2) hast recht. portangabe ist bei mir aber korrekt, war nur nen tippfehler hier im forum
3) wo stell ich punkt 3 genau ein?
4) sollte ich den unter windows-anmeldungen finden? hab ich da nicht nen problem wegen domäne? is das wirklich notwendig?

also falls du zu 3 und 4 mir noch weitere hilfe geben könntest, wäre ich erfreut!

daniel

Re: Webservice konsumieren - authentifizierungsprobleme

17. September 2009 14:30

zu 3: in customsettings.config

aber http://msdn.microsoft.com/en-us/library/ee414220.aspx ist mir gerade über den Weg gelaufen. Vielleicht betrifft Dich das ja.

Volker

Re: Webservice konsumieren - authentifizierungsprobleme

21. September 2009 16:42

Jetzt hat es mich anscheinend auch erwischt. Ich greife von W7-32bit problemlos auf den Webservice von NAV zu. Von einem W7-64-bit, werde ich zur Eingabe von User und Password aufgefordert. Nach Eingabe von User un Passwort wird das ganze noch 3-mal wiederholt und ich erhalte eine leere Seite im Explorer. Mein User ist Super-User, Domänen-Admin und lokaler Admin. Ich teste mal weiter.

Re: Webservice konsumieren - authentifizierungsprobleme

21. September 2009 16:44

genau jetzt hast du auch ein beitrag verfasst, also hier auf dem clientsystem läuft auch ein englisches windows 7 64 bit!!

ansonsten ist es bei mir nun so, dass.......
- das mit der customsettings habe ich mal geprüft, letztendlich ist es das aber nicht.
- der link mit nav 2009 sp 1 webservice changelog ist zwar interessant aber was willst du genau damit sagen, da ich ja wie am anfang erwähnt in meiner umgebung hier nav 2009 sp 1 bereits nutze.

inzwischen ist die situation auch schon wieder etwas anders. als ziemlich blöd hat sich herausgestellt, dass ich zumindest auch ein proxyproblem hatte, obwohl im ie die wsdl korrekt angezeigt wurde hat es im visual studio nicht funktioniert auf grund einer einstellung im ie...!

das problem jetzt ist, dass wenn ich mein testprojekt im visual starte und über den eingebundenen webservice einen auftrag abrufen will funktioniert es! ...1-3 mal. danach kommt ein seltsamer fehler und es hat sich herausgestellt, dass auf dem service tier die beiden dienste für nav und nav web service nicht mehr laufen.
starte ich diese von hand neu funktioniert eine abfrage wieder... 1-3 mal.

das ereignislog auf dem service tier hat mir auf die schnelle mal so gar nicht geholfen und das problem ist für mich noch völlig unverständlich. für jeden hinweis oder ähnliche erfahrungen wäre ich sehr dankbar.

daniel

Re: Webservice konsumieren - authentifizierungsprobleme

22. September 2009 08:11

1. Poste doch mal den vollständigen Eventlog-Eintrag wenn der Service-Dienst beendet wird.

dr hat geschrieben: der link mit nav 2009 sp 1 webservice changelog ist zwar interessant aber was willst du genau damit sagen

2. Ich dachte, dass Dich die Änderung an den Aufträgen betreffen könnte, aber nachdem es sich bei mir ähnlich darstellt ist das wohl hinfällig.

3. Das mit den Proxy-Einstllungen kann man lösen. Ich hatte da mal was gelesen über Webservices via Proxy-Server. Meine das stand mal in der dotnetpro.

4. Was für eine W7-Version hast Du drauf? Beta, RC oder RTM? Ich habe hier ein deutsches RTM. Mehrfache Passwortabfrage und dann leere Seite bei Aufruf von "http://meinServer/DynamicsNAV/ws/services". Wie gesagt vom W7-32-bit geht es.

Re: Webservice konsumieren - authentifizierungsprobleme

22. September 2009 09:39

hi vsnase, also weiter im fehlersuchprogramm... ;-)

1) aber gerne doch. generell kommen direkt 4 einträge im anwendungs-ereignislog, wobei es so scheint als sind es 2 zusammenhörige die aber direkt doppelt auftreten.

Code:
Ereignistyp:   Warnung
Ereignisquelle:   MicrosoftDynamicsNAVServer
Ereigniskategorie:   Keine
Ereigniskennung:   0
Datum:      22.09.2009
Zeit:      09:24:08
Benutzer:      Nicht zutreffend
Computer:   NAVISION
Beschreibung:
Type: Microsoft.Dynamics.Nav.Types.Exceptions.NavNCLCompilationException
SuppressMessage: False
FatalityScope: None
Message: Function ID 8 was called. The object with ID 6810 does not have a member with that ID.
StackTrace:
     bei Microsoft.Dynamics.Nav.Runtime.NavRuntimeHelpers.CompilationError(String error, Object[] parameters)
     bei Microsoft.Dynamics.Nav.BusinessApplication.Codeunit6810.OnInvoke(Int32 memberId, Object[] args)
     bei Microsoft.Dynamics.Nav.Runtime.NavApplicationObjectBase.Invoke(Int32 methodId, Object[] arguments)
     bei Microsoft.Dynamics.Nav.BusinessApplication.Codeunit1.CompanyClose()
     bei Microsoft.Dynamics.Nav.BusinessApplication.Codeunit1.OnInvoke(Int32 memberId, Object[] args)
     bei Microsoft.Dynamics.Nav.Runtime.NavGlobalTriggers.<CloseCompany>b__2()
     bei Microsoft.Dynamics.Nav.Runtime.NavConnection.Transaction(TransactionalOperation operation)
     bei Microsoft.Dynamics.Nav.Runtime.NavGlobalTriggers.CloseCompany()
     bei Microsoft.Dynamics.Nav.Runtime.NavConnection.CloseCompany()
     bei Microsoft.Dynamics.Nav.Runtime.ConnectionPool`1.FlushCacheAndStoreOrDisposeConnection(Object connection)
Source: Microsoft.Dynamics.Nav.Ncl


Code:
Ereignistyp:   Warnung
Ereignisquelle:   MicrosoftDynamicsNAVServer
Ereigniskategorie:   Keine
Ereigniskennung:   0
Datum:      22.09.2009
Zeit:      09:24:08
Benutzer:      Nicht zutreffend
Computer:   NAVISION
Beschreibung:
Service: MicrosoftDynamicsNavWS
User: ROOT\navisionservice
Type: Microsoft.Dynamics.Nav.Types.Exceptions.NavNCLCompilationException
SuppressMessage: False
FatalityScope: None
Message: Function ID 8 was called. The object with ID 6810 does not have a member with that ID.
StackTrace:
     bei Microsoft.Dynamics.Nav.Runtime.NavRuntimeHelpers.CompilationError(String error, Object[] parameters)
     bei Microsoft.Dynamics.Nav.BusinessApplication.Codeunit6810.OnInvoke(Int32 memberId, Object[] args)
     bei Microsoft.Dynamics.Nav.Runtime.NavApplicationObjectBase.Invoke(Int32 methodId, Object[] arguments)
     bei Microsoft.Dynamics.Nav.BusinessApplication.Codeunit1.CompanyClose()
     bei Microsoft.Dynamics.Nav.BusinessApplication.Codeunit1.OnInvoke(Int32 memberId, Object[] args)
     bei Microsoft.Dynamics.Nav.Runtime.NavGlobalTriggers.<CloseCompany>b__2()
     bei Microsoft.Dynamics.Nav.Runtime.NavConnection.Transaction(TransactionalOperation operation)
     bei Microsoft.Dynamics.Nav.Runtime.NavGlobalTriggers.CloseCompany()
     bei Microsoft.Dynamics.Nav.Runtime.NavConnection.CloseCompany()
     bei Microsoft.Dynamics.Nav.Runtime.ConnectionPool`1.FlushCacheAndStoreOrDisposeConnection(Object connection)
     bei System.Threading._ThreadPoolWaitCallback.WaitCallback_Context(Object state)
     bei System.Threading.ExecutionContext.runTryCode(Object userData)
     bei System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
     bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
     bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
     bei System.Threading._ThreadPoolWaitCallback.PerformWaitCallbackInternal(_ThreadPoolWaitCallback tpWaitCallBack)
     bei System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(Object state)
Source: Microsoft.Dynamics.Nav.Ncl


2) ah ok. ich habe vor meinem test die änderungen von sp 1 bzgl webservices auch nur überflogen, dachte halt je neuer desto eher sind anfangsbugs behoben

3) damits nicht wieder daran liegt hab ich fürn ie mein proxy einfach mal komplett deaktiviert. normal mache ich den ie am tag eh net auf...

4) ich habe nen rtm laufen. als ms partner war das per msdn recht fix da und ich habs dann direkt verwendet. mit anderen versionen habe ich es bisher nicht getestet, da der jetzt auftretende fehler, dass die beiden services auf dem entfernten server beim aufruf des webservices abgeschossen werden doch _sehr_ seltsam ist.

Re: Webservice konsumieren - authentifizierungsprobleme

22. September 2009 10:22

1. zu den Fehlermeldungen: so wie ich das lese, versucht der Server irgendwas zu kompilieren, aber ohne Erfolg. Dazu würde mir als erstes einfallen, dass es wohl einen Unterschied macht, ob .NET 2.0 oder .NET 2.0 SP1.

2. das Problem betrifft nicht nur W7 64-bit, sondern ich kann es auf einem XP 32-bit reprodizieren. Es scheint, als ob der zugreifende User nicht geprüft werden kann oder von diesem PC nicht auf den Dienst zugreifen darf.

Unser NAV liegt auf einem SBS2003. Vieleicht hat es damit was zu tun.

Re: Webservice konsumieren - authentifizierungsprobleme

22. September 2009 10:51

1) hm, das kann ich mir nicht so recht erklären, in meinem visual studio projekt ist .net 3.5 eingestellt und auf dem server ist dieses auch definitiv installiert. ein test mit umstellen auf .net 2.0 im projekt führt zum gleichen fehler.

vielleicht noch mal zum eindeutigen beschreiben meiner konstellation.
- auf einem server (win server 2003 enterprise R2 SP2 deutsch, 32bit) laufen die beiden dienste für nav service tier und webservices
- über den classic client habe ich die page auftrag als webservice freigegeben
- auf meinem client (win 7 rtm englisch, 64bit) läuft ein visual studio 2008 in dem ich ein kleines webprojekt geschrieben habe, was einen navision webserice benutzen soll (auslesen von auftragsdaten)

debugge ich mein vs project kann ich über die seite eine auftragsnummer in den webservice schießen und bekomme ein paar kopf- und zeilendaten. dies funktioniert sogar schon! allerdings tut es das nur 1-3 mal und danach kommt ein fehler alá "System.Net.WebException: Unable to connect to the remote server [...]".
dem fehler nachgegangen stelle ich dann fest, dass auf dem server beide beschriebenen dienste abgeschossen sind mit dem oben geposteten log. und mir fehlen irgendwie die ansatzpunkte weil mir das log nicht wirklich auf die sprünge hilft.

wie ist bei dir gerade der stand der dinge? problem mit der mehrfachen loginabfrage und weiter gehts nicht?



2) anscheinend bin ich da nun aber einen schritt weiter, weil es ja wie gesagt zumindest kurzzeitig funktioniert. wie willst du den webservice abfragen/benutzen? auch mit nem vs project?



edit: eben nochmal fix mit infopath probiert und dort zeigt sich ein ähnliches bild zu deiner beschreibung. loginabfrage kommt 3-4 mal, danach geht es aber weiter! und ich kann einen auftrag lesen, die dienste sind dann aber auch abgeschossen... argh!

Re: Webservice konsumieren - authentifizierungsprobleme

22. September 2009 13:56

zu 1.: Ich meinte das anders. Kann es sein, dass auf dem Server .NET 2.0 ohne SP1 installiert ist und der NAV-Service SP1 verlangt? ggf. auch umgekehrt.

Mit VS2008 auf W7-64 muss ich beim Einbinden in das Projekt mehrfach User/Passwort eingeben, kann dann aber den Webverweis ins Projekt einbinden. Auf W7-32 geht das alles ohne User/Passwortabfrage.

Code:
Dim ws As New myserver.SystemService
ws.Url = "http://myserver:7047/DynamicsNAV/ws/systemservice"
ws.UseDefaultCredentials = True
For Each ss As String In ws.Companies   '<= hier steigt W7-64 ohne weitere Fehlermeldung aus
     MsgBox(ss)
Next


Probiere ich das ganze im IE dann gibt es unter dem einen Rechner (W7-32) keine Probleme auf anderen (2x W7-64, 1x XP) die Passwort-Abfrage. Unterschied zu Dir: ich habe hier ein NAV2009 ohne SP1.

Wo kann man denn Berechtigungen für den NAV-Webservice überall setzen? So wie ich das sehe, benötigt der NAV-Webservice keinen IIS. Im IIS kann ich die Berechtigungen ja einmal im IIS selbst und einmal auch auf Dateisystemebene angeben. Wie ist das beim NAV-Service? So langsam gehen mir die Ideen aus.

Re: Webservice konsumieren - authentifizierungsprobleme

22. September 2009 16:37

vsnase hat geschrieben:Probiere ich das ganze im IE dann gibt es unter dem einen Rechner (W7-32) keine Probleme auf anderen (2x W7-64, 1x XP) die Passwort-Abfrage. Unterschied zu Dir: ich habe hier ein NAV2009 ohne SP1.

Wo kann man denn Berechtigungen für den NAV-Webservice überall setzen? So wie ich das sehe, benötigt der NAV-Webservice keinen IIS. Im IIS kann ich die Berechtigungen ja einmal im IIS selbst und einmal auch auf Dateisystemebene angeben. Wie ist das beim NAV-Service? So langsam gehen mir die Ideen aus.


- bei mir im ie kommt auch die sicherheitsabfrage, aber nur exakt 1x und dort gebe ich einen gültigen root-user an, der sowohl im nav, als auch auf db-ebene berechtigung hat, und er zeigt mir die ws-definition an
- für mich sieht es auch so aus, als ob es vom iis unabhängig ist. vielleicht ist eine art minimal-webserver irgendwo im nav integriert?
- spezielle berechtigungen bzgl. webservices kann man meiner meinung nach nicht setzen, sondern lediglich im nav und auf der db. so wie ich das sehe sind diese dann für den webservice auch gültig?


edit:
die .net framwork versionen habe ich auch nochmal überprüft. sieht so aus, dass...
...auf dem server sind installiert
.net 2.0 sp 2 + german language pack
.net 3.0 sp 2 + german language pack
.net 3.5 sp 1
...auf dem client sind installiert
.net 2.0 sp 2
.net 3.5

Re: Webservice konsumieren - authentifizierungsprobleme

23. September 2009 09:42

vsnase hat geschrieben:
Code:
ws.UseDefaultCredentials = True

Wo kann man denn Berechtigungen für den NAV-Webservice überall setzen?


mir ist noch was aufgefallen. ich benutze im vs-project nicht die default-credentials (was genau sind die?).
ich setze diese explizit auf einen benutzer dem ich zum testen angelegt habe per:
Code:
myService.Credentials = new NetworkCredential("Benutzer", "Passwort", "Domäne");

Re: Webservice konsumieren - authentifizierungsprobleme

24. September 2009 10:46

Ich habe gerade was ganz witziges rausgefunden:

Melde ich mich an dem 32-bit-Rechner (an dem der Zugriff auf den Webservice funktioniert) mit dem lokalen Benutzer-Konto an, dann funktioniert der Zugriff. Melde ich mich mit diesem Rechner mit einem Domänen-Benutzer an, dann erhalte ich die mehrfache Passwort-Abfrage. Irgendwie schreit das nach GPO, aber ich habe da jetzt auf die Schnelle nix passendes gefunden.

Ich werde mal versuchen das auf einem 2.Server nachzustellen.

Volker

Re: Webservice konsumieren - authentifizierungsprobleme

25. September 2009 09:07

und gut, dass es kollegen gibt, denn ich/wir haben auch noch was nettes rausgefunden...

mein problem war ja, dass die abfrage zwar funktioniert, aber nur 1-3 mal und dann der dienst abgeschossen war. ausgehend von der fehlermeldung im ereignislog, haben wir dann mal die codeunit 6810 genauer angeschaut bzw im developers toolkit geprüft, von wo diese überall verwendet wird. und es hat sich herausgestellt, dass in der codeunit 1 (application management) ein aufruf stattfindet, der für den fehler verantwortlich ist!!

Code:
CompanyClose()
//EmployeePortalApplSrv.StopQueue;  <-------------------
MobDocDispatcher.Stop;
BizTalkApplnSrvStartup.StopTcpListen;
IF GUIALLOWED THEN
  LogInEnd;


die auskommentierte zeile ist im standard enthalten und hat hier für exakt alle noch vorhandenen probleme gesorgt wie es scheint. denn nach dem auskommentieren scheint bei mir nun selbst mit domäne und verteilten rechnern und gemischten os (32/64 bit) etc es zu funktionieren, aufträge inkl zeilen auszulesen. und das mehrmals hintereinander ohne dienst abschießen.

falls mir jemand genaueres sagen kann, was diese zeile exakt tut wäre natürlich interessant.

Re: Webservice konsumieren - authentifizierungsprobleme

25. September 2009 09:19

Das ist interessant, aber ich habe ja hier NAV2009 ohne SP und dort fehlt diese Zeile. Es muss also noch was anderes geben.

Volker

Re: Webservice konsumieren - authentifizierungsprobleme

25. September 2009 09:25

als ich an der "stelle" stand, wo ich mit der authentifizierung zu kämpfen hatte, waren die helfenden maßnahmen sofern ich es richtig in erinnerung habe:

- proxy im ie komplett abstellen (client), da wohl auch das eintragen einer ausnahme (ip des service tiers) nicht richtig gezogen hat
- einen neuen domänen benutzer anlegen und im navision sowie im sql management studio mit allen rechten versorgen
- diesen erstellen benutzer im visual studio als new NetworkCredential("Benutzer", "Passwort", "Domäne") für meinen webservice