(GELÖST) C# Anwendung mit Webservice und mehreren Servern

24. November 2011 10:17

Hallo zusammen,

ich versuche gerade ein C# (Visual Studdio 2010) Addin zu schreiben für den RTC, in dem ich mit Webservice auf eine veröffentlichte Page und damit auf die Artikeltabelle zugreife.
In C# binde ich den Webservice über http://SERVERNAME:7047/DynamicsNAV/WS/C ... ge/Artikel ein.
Dem C#-Addin übergebe ich einen Filterstring für die Artikeltabelle.
Nun möchte ich das C#-Addin so programmieren, dass es für all unsere Kunden gilt.
Ich kann in C# die Url des Webservice ändern, bevor ich auf die veröffentlichte Page zugreife.
Wie kann ich herausfinden bzw. übergeben, welcher SERVERNAME und COMPANY genutzt werden soll?
Ich möchte nicht für jeden Kunden die C# Applikation neu kompilieren, nur weil ich die Url des Webservices ändern muss.

grüße,
Jürgen
Zuletzt geändert von jbratzke am 1. Dezember 2011 14:05, insgesamt 1-mal geändert.

Re: Eine C# Anwendung mit Webservice und mehreren Servern

24. November 2011 10:31

Hallo,

C#-Add-in über Webservice???

Add-In bindet man im RTC ein, du meinst bestimmt eine C#-Anwendung über den Webservice, oder:-)

Ich würde mir eine Textdatei bauen und diese erstmal einlesen.
Also die URLs und den User eintragen und einmalig auslesen. Wäre mal eine Idee.
Dann musst du halt nur die Textdatei ändern und diese kannst du in einen bestimmten Ordner ablegen.
Wäre mal eine einfache Variante.


Gruß
Aydin

Re: Eine C# Anwendung mit Webservice und mehreren Servern

24. November 2011 10:39

Hallo Aydin,

ich möchte gerne in eine Page ein C#-Addin einbauen.
In diesem C#-Addin will ich mehrfach auf die Artikeltabelle zugreifen.
Dafür binde ich in das C#-Addin ein Webservice ein.
Nun möchte ich nicht das C#-Addin für jeden Kunden neu kompilieren, da die URL des Webservices unterschiedlich ist.
Textdatei ist irgendwie nur eine Notlösung.
Dachte, dass ich irgendwie sowohl einen Artikelfilter, als auch den über C-SIDE Programmierung? ermittelten Servernamen und Mandantennamen übergeben kann.

grüße,
Jürgen

Re: Eine C# Anwendung mit Webservice und mehreren Servern

24. November 2011 10:52

Hallo nochmal,

habe die Idee, die Tabelle Mandantendaten zu erweitern mit dem Feld :'URL für Webservices'.
Hier wird pro Mandant die URL wie folgt eingetragen :'http://Servername:Port/DynamicsNAV/WS/Mandanenname/Service'.
Dem c#-Addin übergebe ich dann zusätzlich (z.B. zum Artikelfilter) semikolonsepariert diesen Text.
Die Webservices müssen dann bei allen Mandanten den selben Servicenamen haben.
Hat jemand einen alternativen Vorschlag für den semikolonseparierten Text?

grüße,
Jürgen

Re: Eine C# Anwendung mit Webservice und mehreren Servern

24. November 2011 13:01

Hallo,

also die Idee an sich finde ich interessant. Add-In einbauen und über Webservice kommunizieren:-)
So kriegst du also die Pagedaten direkt über den Webservice und machst dir keine Gedanken, wie du die ganzen Daten ans Add-in schaufelst.
Und das funktioniert?

Alternative wäre du machst dir eine BiGText Variable und befüllst diese als XML Struktur.
Die Tags nennst du halt entsprechend (Server, Portnummer, usw) diese musst du dann vorher im Add-in auslesen.
(BigText übergibst du als SourceExpr.)

Gruß
Aydin

Re: Eine C# Anwendung mit Webservice und mehreren Servern

24. November 2011 19:48

Du meinst so:
Code:
      Dim ns As New VSDynamicsNAV.NAVServiceProduct.Product_Service
                ns.UseDefaultCredentials = True
                ns.Url = NAVWebserviceServer & ":" & NAVWebservicePort & "/DynamicsNAV/WS/" & Uri.EscapeDataString(NAVCompany) & "/Page/Product"

                Dim filter1 As New VSDynamicsNAV.NAVServiceProduct.Product_Filter()
                filter1.Field = VSDynamicsNAV.NAVServiceProduct.Product_Fields.No
                filter1.Criteria = ItemNo

                Dim filters() As VSDynamicsNAV.NAVServiceProduct.Product_Filter = New VSDynamicsNAV.NAVServiceProduct.Product_Filter(0) {filter1}
                Dim products() As VSDynamicsNAV.NAVServiceProduct.Product = ns.ReadMultiple(filters, Nothing, 0)
                Dim row As DataRow
                For Each product As VSDynamicsNAV.NAVServiceProduct.Product In products
                   ...
                Next
 


NAVWebserviceServer und NAVWebservicePort kannst Du dann doch aus der ClientUserSettings.config auslesen.

Volker

Re: Eine C# Anwendung mit Webservice und mehreren Servern

25. November 2011 09:46

Hallo Volker,

was ist, wenn ich mehrere Webservice Dienste laufen habe?
Wir haben oft mehrere Datenbanken im Einsatz.
Dann würde das mit den ClientUserSettings.config nicht laufen, oder?
Der Code ansonsten ist so, wie ich ihn in etwa auch schon habe, nur bei mir in C#.

grüße,
Jürgen

Re: Eine C# Anwendung mit Webservice und mehreren Servern

25. November 2011 10:00

Kannst Du mal genauer sagen, was Du mit "Datenbanken" meinst? Mehrere Datenbanken in einer Instanz, mehrere Instanzen auf einem Server oder mehrere Server? Und wieso willst Du aus einer RTC-Sitzung (Du machst doch eine Addin für den RTC?) auf mehrere Datenbanken zugreifen?

Volker

Re: Eine C# Anwendung mit Webservice und mehreren Servern

25. November 2011 10:07

Hallo Volker,

auf einem Server laufen zwei Datenbankeninstanzen.
Für diese zwei Datenbanken gibt es jeweils ein Navision Server und einen Webservice Dienst.
Der Kunde kann sich mit den beiden Navision Server über dem RTC verbinden.
Dafür werden pro gewünschter Navision Server - Verbindung eine Verknüpfung mit Parameterangabe des Navision Servers erstellt.
Im RTC kann immer nur eine Datenbank offen sein.
Pro Navision Server und Webservice Dienst gibt es ein Service-Verzeichnis mit ClientUserSettings.config

grüße,
Jürgen

Re: Eine C# Anwendung mit Webservice und mehreren Servern

25. November 2011 12:04

Hallo,

und die Idee mit der XML Struktur kam jetzt nicht in Frage?

Also dass du in einer Codeunit diese Struktur erstellst. Die Werte sollten dann in einer Tabelle stehen und Objekte müssten in beiden DBs dann vorhanden sein.
Über SourceExpr übergibst du dann die XMl Struktur ans Add-In. Das wäre mal so die einfache Variante und du bleibst damit immer in NAV, ohne extern noch irgendwelche config Datei einzulesen.

Oder habe ich dich jetzt irgendwo falsch verstanden?

Gruß
Aydin

Re: Eine C# Anwendung mit Webservice und mehreren Servern

25. November 2011 12:54

Hi Jürgen,

Du willst aber schon auf die zum jeweilig im RTC verbunderen Datenbank mit deinem Webservice zugreifen? Oder auf jede x-beliebige DB?

Ich habe mich bis jetzt nicht mit Add-Ins für den RTC beschäftigt, aber auch die Add-Ins muss ja irgenwie rausbekommen mit wem Sie gerade kommunizieren und wenn nur irgendwo die Einstellungen aus der clientusersettings.config im Arbeitsspeicher geparkt sind. Microsoft.Dynamics.Framework.UI.DataSourceDictionary könnte so ein Ort sein.

Volker

Re: Eine C# Anwendung mit Webservice und mehreren Servern

25. November 2011 13:51

Also irgendwie fehlt da der Überblick, was Du genau möchtest. Ich glaube aydin hat auch eine andere Vorstellung was du überhaupt wirklich möchtest.
Deine erste Aussage war ein Addin, welches du für mehrere Kunden nutzen möchtest. Später postest Du eine Prototyp, der schon irgendwelche Funktionalität besitzt, die Du vorher gar nicht beschrieben hast.

Die Webreferenz im Visualstudio (nicht das Attribut URL im Objekt) hat auch den Mandantennamen immer drin. Den kannst Du da nicht wegprogrammieren. Als "Uni-Customer" Addon wird dies auch schwierig, da kaum ein Kunde Dein Produkt ohne Anpassungen haben möchte. Da ist das Branching eh vorprogrammiert.

Re: Eine C# Anwendung mit Webservice und mehreren Servern

25. November 2011 13:57

Hallo,

die Richtung, die Volker vorschlägt und seine Codebeispiele ist genau das, wo ich hin will.
Es soll tatsächlich ein "Uni Customer"-Addin sein, in dem ich auf Tabellen über Webservices zugreifen will.

grüße,
Jürgen

Re: Eine C# Anwendung mit Webservice und mehreren Servern

25. November 2011 14:55

Hallo Jürgen,

Volker hat recht der Überblick ist irgendiwe verloren gegangen, sorry:-)

Also das Add-In soll aus RTC1 (bzw. RTC2) sowohl auf die Daten aus DB1 und DB2 zugreifen können, oder?

Wie übergibst du die Informationen ans Add-In? Über SourceExpr?
Im Grunde die Servernamen und Portnummern der NAVServer 1 u. 2 denke ich mal.

Oder war das jetzt zu kompliziert und falsch erklärt:-)?

Ansonsten, wenn das Problem noch nicht gelöst ist, wäre es schön wenn du genau dein Vorhaben schildern könntest.
EIne Lösung sollten wir schon finden:-)

Gruß
Aydin

Re: Eine C# Anwendung mit Webservice und mehreren Servern

25. November 2011 15:00

Hallo zusammen,

das Add-In soll nur auf die Datenbank und den Mandanten per Webservices zugreifen, in dem es ausgeführt wird.
Werde beizeiten Microsoft.Dynamics.Framework.UI.DataSourceDictionary und ClientUserSettings.config austesten.

vielen Dank erstmal,
Grüße
Jürgen

Re: Eine C# Anwendung mit Webservice und mehreren Servern

1. Dezember 2011 14:03

Hallo zusammen,

ich habe mich für folgende Lösung von Aydin entschieden:

und die Idee mit der XML Struktur kam jetzt nicht in Frage?

Also dass du in einer Codeunit diese Struktur erstellst. Die Werte sollten dann in einer Tabelle stehen und Objekte müssten in beiden DBs dann vorhanden sein.
Über SourceExpr übergibst du dann die XMl Struktur ans Add-In. Das wäre mal so die einfache Variante und du bleibst damit immer in NAV, ohne extern noch irgendwelche config Datei einzulesen.


In der Mandantendaten-Tabelle füge ich ein neues Feld Webervice-URL hinzu.
Im Addin weise ich dann die übergebene Webservice-URL den Webservice(s) zu.
Zusätzlich werden bei allen Kunden entsprechend gleiche Einträge in der Webservicetabelle gemacht bezüglich Webservice Namen.

vielen Dank und grüße,
Jürgen