[Gelöst]Mehrere Instanzen vom NAV Webservice, 3Tier-Install

12. April 2011 13:41

Hallo zusammen,

ich habe noch kleine Probleme mit dem Zugriff der Webservices auf die Datenbank.

Konfiguration, 3-Tier Installation(ich nenne die 3 Maschinen mal SQL, NAV, CLIENT)

Es sind zwei Instanzen des NAV-Server auf dem NAV installiert, beide laufen unter einem Domain\User, SPN´s und Delegation ist gesetzt, funktioniert soweit.

Jetzt bräuchte ich eben noch zwei "Microsoft Dynamics NAV Business Web Services", den zweiten installiert nach:
http://blogs.msdn.com/b/nav/archive/200 ... ember.aspx

so, und jetzt häng ich, nach:
http://msdn.microsoft.com/en-us/library/ee414212.aspx

brauch ich ebenfalls für den Webservice einen SPN, klingt logisch, halt die Anleitung sagt ich brauch zwei SPN, kapier ich nicht:

1.spn: setspn -A http/NAVSERV.yourDomain.yourCompany.com yourDomain\yourUser
2.spn: setspn -A http/NAVSERV yourDomain\yourUser

kann mir jemand sagen, für was ich den zweiten brauch, als Erklärung steht dran "exclude the company and domain from the server adress"... warum????

und zu dem 1. SPN: wenn ich jetzt ne zweite Instanz vom WS hab, und die unter zwei verschiedene Ports laufen lasse, muss ich dann den 1. SPN zweimal ausführen und mit Ports?

so hätt ichs nämlich gemacht, Problem ist, dass er beim SQL-Server mit Anonymous daher kommt, was soviel heisst, dass die Delegation bzw Kerberos nicht funktioniert. Die Delegation für den DomainUser funktioniert jedoch bereits für den NAV Server, also kanns daran nicht liegen.
ha, versteht das jemand? also wenn ich mich nochmal klarer ausdrücken soll, dann schreit einfach...
Zuletzt geändert von andibaum am 13. April 2011 15:24, insgesamt 2-mal geändert.

Re: Mehrere Instanzen vom NAV Business Webservice, 3Tier-Ins

12. April 2011 13:46

Zusatz: unter der Anleitung für Delegation steht noch das mit der httpcfg:

httpcfg delete urlacl –u http://+:7047/DynamicsNAV/
httpcfg set urlacl -u http://+:7047/DynamicsNAV/ -a D:^(A;^;GX^;^;^;<security identifier>)

jetzt hab ich halt das für beide WS-Instanzen mit netsh gemacht, da wir das auf SERVER 2008 R2 laufen haben

netsh http add urlacl url=http://+:7047/DynamicsNAV user=DOMAIN\USER
netsh http add urlacl url=http://+:7057/DynamicsNAV2 user=DOMAIN\USER

Re: Mehrere Instanzen vom NAV Business Webservice, 3Tier-Ins

12. April 2011 15:41

Es gibt auf mibuso ein tool, was das alles für dich macht.
Stichwort Multiple Service Tiers.

Re: Mehrere Instanzen vom NAV Business Webservice, 3Tier-Ins

12. April 2011 16:31

Meinst du etwa http://www.mibuso.com/dlinfo.asp?FileID=1037

Leider verwendet diese Tool port sharing und den user Network Service, hat man allerdings spezielle DomainUser, wie es im Walkthrough für eine 3 Tier Installation auf 3 Computer beschrieben wird, so is zum Einen port sharing nicht möglich und zum Anderen ist das mit den SPN's und Delegates dann alles etwas spezieller.

Mir würde es schon reichen, wenn mir einer sagen kann was für SPN's er für den WebService Dienst aufgesetzt hat, und das ganze unter einem Domain/User.

Re: Mehrere Instanzen vom NAV Business Webservice, 3Tier-Ins

12. April 2011 21:37

Hallo Andreas,

wie auch auf der Webseite angedeutet richtest du einen SPN für den Full Qualified Domain Name (FQDN) ein und den anderen für den Netbios Namen. Diese werden unterschiedlich behandelt.

Bzgl. der SPN für den RTC benötigst du für jede Instanz jeweils 2 mit entsprechender Portangabe. Für Web Services habe ich bisher nie weitere angeben müssen, da hier kein Port angegeben wird, sofern diese auf der gleichen Maschine laufen. Also sind die zwei bereits eingerichteten ausreichend.

Re: Mehrere Instanzen vom NAV Business Webservice, 3Tier-Ins

13. April 2011 10:32

Hallo Carsten,

eigentlich hab ichs ja genau so.. der Zugriff über RTC auf die Datenbanken funktioniert für beide Instanzen, nur der Webservice will nicht so richtig, mal ne Übersicht:

Die Server: Server,Dienstname,Port,DomainUser

SQL:SQLSERVER, MSSQLSERVER, , DOMAIN\navsqlserver-spn
NAV1:NAVSERVER, DynamicsNAV,7046, DOMAIN\navserver-spn
NAV2:NAVSERVER, DynamicsNAV2,7056, DOMAIN\navserver-spn
WS:NAVSERVER, , 7047, DOMAIN\navserver-spn
WS:NAVSERVER, , 7057,DOMAIN\navserver-spn

Die SPN's:

SQL: setspn -A MSSQLSvc/SQLSERVER.DOMAIN.INTRA:1433 DOMAIN\navsqlserver-spn

NAV1: setspn -A NAVSERVER_DynamicsNAV/NAVSERVER.DOMAIN.INTRA:7046 DOMAIN\navserver-spn
NAV2: setspn -A NAVSERVER_DynamicsNAV2/NAVSERVER.DOMAIN.INTRA:7056 DOMAIN\navserver-spn

WS: setspn -A http/NAVSERVER.DOMAIN.INTRA DOMAIN\navserver-spn
WS: setspn -A http/NAVSERVER DOMAIN\navserver-spn

HTTP:
netsh http add urlacl url=http://+:7047/DynamicsNAV user=DOMAIN\navserver-spn

Delegation für navserver-spn: MSSQLSvc SQLSERVER.DOMAIN.INTRA, 1433


Folgende Fehler sind aus den Logs zu holen, wenn ich auf einen Webservice via IE zugreifen möchte:

SQLSERVER: Application Log:

Code:
Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'. Reason: Token-based server access validation failed with an infrastructure error. Check for previous errors. [CLIENT: 172.17.4.151]


NAVSERVER: Application Log:

Code:
User:
Type: Microsoft.Dynamics.Nav.Types.NavDatabasePasswordException
SuppressMessage: False
FatalityScope: None
Message: The login failed when connecting to SQL Server imp-db-agb-21.
StackTrace:
     at Microsoft.Dynamics.Nav.Runtime.NavRuntimeAdapter.ErrorHandler(Int32 errorCode, Int32 errorNumber, Int32 moduleNumber, String errorText)
     at Microsoft.Dynamics.Nav.Runtime.NativeMethods.AdapterOpenConnection(IntPtr databaseHandle, String serverName, NetProtocolType netType, String databaseName, Int32 clientConnectionType, DeadConnectionHandler deadConnectionHandler)
     at Microsoft.Dynamics.Nav.Runtime.NavConnection.Open()
     at Microsoft.Dynamics.Nav.Service.WebServices.ServiceBroker.Invoke(Boolean isSoapMessage, String serviceName, Uri url, XmlReader input, TextWriter output)
     at Microsoft.Dynamics.Nav.Service.WebServices.NavWebService.<>c__DisplayClass2.<>c__DisplayClass4.<ProcessMessage>b__1()
     at Microsoft.Dynamics.Nav.Service.WebServices.Disposer.Scope(Code code)
     at Microsoft.Dynamics.Nav.Service.WebServices.NavWebService.<>c__DisplayClass2.<ProcessMessage>b__0(StreamWriter streamWriter)
     at Microsoft.Dynamics.Nav.Service.WebServices.WCFUtil.GetPopulatedMemoryStream(StreamFillingCallback callback)
     at Microsoft.Dynamics.Nav.Service.WebServices.NavWebService.ProcessMessage(Message message)
     at SyncInvokeProcessMessage(Object , Object[] , Object[] )
     at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
     at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
     at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
     at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc)
     at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc)
     at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc)
     at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc)
     at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)
Source: Microsoft.Dynamics.Nav.Ncl


hab übrigens NAV 2009, und nicht 2009 SP1, gibts da noch n BUG? finde keinen Fehler mehr.

Re: Mehrere Instanzen vom NAV Business Webservice, 3Tier-Ins

13. April 2011 15:23

ich glaub es hackt,

also vorher(1Tier Installation) konnte ich den WebService über die IP im IE aufrufen, dabei kam eine Abfrage nach meinem Domänen-Login:
http://172.11.1.111:7047/DynamicsNav/ws ... rviceMobil

wenn ich nicht die IP genommen habe sondern den Namen für den Server, so kam die Login-Abfrage nicht, ging aber trotzdem.

Bei der neuen 3Tier Installation mit SPN´s und Delegation, funktioniert nur noch die URL mit Servernamen und nicht über die IP?????
Über die IP kommt die Login Abfrage und er schlägt beim Datenbankserver mit einem NT AUTHORITY\ANONYMOUS LOGON auf.
Nachdem ichs immer über die IP versucht hatte... ahhhhh :twisted: Dann nehm ich halt nun den Servernamen, aber warum das jetzt nicht mehr über IP geht, würde mich schon interessieren.

Auch die 2.Instanz des WS geht ohne Probleme auf einem anderen Port.. pahhhh, schwere Geburt.

Re: [Gelöst]Mehrere Instanzen vom NAV Webservice, 3Tier-Inst

14. April 2011 08:40

Mit dem mibuso-Tool kannst du auch verschiedene Ports und verschiedene Domainusers hinterlegen.
Habe das Ding ja schon selber benutzt und nie Probleme gehabt. :-)

Re: Mehrere Instanzen vom NAV Business Webservice, 3Tier-Ins

14. April 2011 10:05

andibaum hat geschrieben:wenn ich nicht die IP genommen habe sondern den Namen für den Server, so kam die Login-Abfrage nicht, ging aber trotzdem.


im Prinzip sagst Du dem Webserver auf welchen Namen er hören und reagieren soll. Du kannst ja auf einer IP und einem Port mehrere Webseiten mit verschiedenen Namen betreiben (wie praktisch die meisten Webhoster). Solange Du mit dem Namen drauf zugreifst kommst Du an der richtigen Seite raus, nimmst du aber die IP kommt irgendwas anderes oder ein Fehler (z. B. 404). Dia Frage nach dem Passwort ist für mich auch logisch, da Du mit einem User der Mitglied der Domain ist angemeldet bist und auf einen Server der gleichen Domain zugreifst, bei Angabe der IP-Adresse fehlt diese Domain-Angabe aber.

Volker

Re: [Gelöst]Mehrere Instanzen vom NAV Webservice, 3Tier-Inst

15. April 2011 12:59

na, das klingt jetzt mal logisch... Danke, jetzt blick ich durch :)