Laden...
G
Benutzerbeschreibung

Forenbeiträge von Generalissimo Ingesamt 131 Beiträge

17.03.2011 - 13:39 Uhr

Hi,

grundsätzlich kannst du NET-Assemblies die ein COM-Interface haben nicht direkt als COM-DLL in ein NET-Projekt wieder einbinden (hast ja schon festgestellt). Was du machen kannst ist alles dynamisch (Stichwort Late-Binding) machen.

Da würde ich dir VB.NET empfehlen, weil du da alles mit :

Dim comObject as Object
comObject = CreateObject("Die ProgID hier") machen kannst.

Das Late-Binding geht auch in C# is allerdings echt kompliziert.
Stichwort .Invoke()

Mir stellt sich allerdings auch die Frage nach dem Sinn! Ich würde ehrlich gesagt alles in .NET implementieren und dann halt Interfaces definieren. Wenn du innerhalb deines Programms arbeitst nutzt du das NET Interface ansonsten bittest du die selbe Funktionalität für andere Programme einfach über ein zweites Interface das COM-Fähigkeiten besitzt.

16.09.2010 - 11:50 Uhr

schau dier mal das Beispiel von Rainbird an n-Tier Architektur Beispiel

16.09.2010 - 11:28 Uhr

@Koloss: Ja

@FZelle: ich weiß ja nicht, wie gut Koloss sich auskennt, aber IOC/DI für den Start finde ich bissl übertrieben. Normale View-Business-DataLayer würde reichen.

Wenn es doch sein soll, dann schau mal hier Koloss: Enterprise Library 5

21.04.2010 - 15:28 Uhr

Hi,

und warum muss es im Operation-Contract generisch sein?
Mach doch die drei Funktionen im Operation-Contract mit nem Parameter für den Tabellen-Namen und mach im Hintergrund im Service die generischen Funktionen.

06.02.2010 - 15:43 Uhr

hi,

ich geh mal davon aus, dass das bei deinem Provider ähnlich ist, wie bei den meisten und zwar: Die meisten Provider lassen von außen keine Verbindung zu den Datenbanken zu. Verbindungen kannst du z.B. mittels PHP oder ASP.NET nur aufbauen, weil die Skripte auf den Servern der Provider ablaufen und interpretiert werden. Sollte das bei deinem Provider der Fall sein (musst mal nachfragen), dann gibt's noch eine Möglichkeit: Schreibe einfach nen Webservice (PHP oder ASP.NET) und lasse über den die Daten abfragen. An den Webservice kommst immer ran.

24.01.2010 - 21:29 Uhr

Hi,

also ich löse das immer in dem ich den C# Code als COM nach außen gebe. Soweit ich weiß, gibt es keine andere Möglichkeit.

06.11.2009 - 18:30 Uhr

Ja ist es. Einfach mal bei Google C# und COM eingeben.

Gerade bei Codeproject gibt es dazu jede Menge.

26.10.2009 - 16:29 Uhr

Hi,

also wenn ich dein Beitrag richtig verstanden hab meinst du WCF und brauchst sowas wie Duplex-Kommunikation, sprich neben Clientzugriff auf den Server kann auch der Server auf den Client zugreifen.

10.10.2009 - 10:33 Uhr

also einfache, sich nicht wiederholende Elemente (als Bsp.: bei einem Brief die Adresse) würde ich über Custom Properties lösen. Custom Property von außen über COM-Interop befüllen und Custom Property als Platzhalter im Dokument einsetzen.

Die Tabelle würde ich komplett von außen machen. Da einfach einen Platzhalter <TABLE_XY> und dann mit den COM-Interop Mitteln eine Tabelle dort erzeugen oder sogar noch weiterführend ein Excel-Dokument einfügen und das ganze vorher in Excel befüllen

22.06.2009 - 12:06 Uhr

einfach folgende Klasse erstellen:

[RunInstaller(true)]
    public class WindowsServiceInstaller : Installer
    {
        /// <summary>

        /// Public Constructor for WindowsServiceInstaller.

        /// - Put all of your Initialization code here.

        /// </summary>

        public WindowsServiceInstaller()
        {
            ServiceProcessInstaller serviceProcessInstaller =
                               new ServiceProcessInstaller();
            ServiceInstaller serviceInstaller = new ServiceInstaller();

            //# Service Account Information

            serviceProcessInstaller.Account = ServiceAccount.LocalSystem;
            serviceProcessInstaller.Username = null;
            serviceProcessInstaller.Password = null;

            //# Service Information

            serviceInstaller.DisplayName = "";
            serviceInstaller.StartType = ServiceStartMode.Automatic;

            //# This must be identical to the WindowsService.ServiceBase name

            //# set in the constructor of WindowsService.cs

            serviceInstaller.ServiceName = "";
            serviceInstaller.Description = "";

            this.Installers.Add(serviceProcessInstaller);
            this.Installers.Add(serviceInstaller);
        }
    }

und mit installutil /i Exe-Anwendung installieren

13.06.2009 - 16:36 Uhr

ich vermute users ist in mysql ein reserviertes wort

25.05.2009 - 14:44 Uhr

hm, komisch.

Com Server bedeutet doch, dass egal mit welcher Sprache, die bereitgestellten Funktionen immer verfügbar sind

simple ausgedrückt ja. com heisst zentral registrieren und aufrufbar sein (jetzt nicht irgendwelche theorie antworten, ich denke camelord weiss was COM ist)

also eigentlich sollte man als C# client nie auf nen c# com server zugreifen. eher direkt über net und einer api hantieren.

probiere doch mal einfach excel zu nehmen und dort in nem kurzen makro dein com server zu testen

was kommt eigentlich für ne fehlermeldung??

25.05.2009 - 14:32 Uhr

eigentlich schon. dann mach mit tlbexp zum testen eine neue tlb und mit tlbimp die interopts davon

25.05.2009 - 11:49 Uhr

eins dafür wäre XPanderControl (Link)

25.05.2009 - 11:43 Uhr

also wenn du den wirklich ganz von aussen gewählten weg nehmen willst, dann erzeuge dir mit tlpimp eine interop assembly und binde die in ein neues c# projekt ein

achso vergessen: du kannst natürlich auch einfach late binding nutzen. dann brauchst nix zu importieren

13.04.2009 - 17:51 Uhr

mich würde mal das tutorial interessieren. kannst du mal bitte den link nennen. mfg

04.02.2009 - 09:29 Uhr

Hallo,
Die private Variable kann weggelassen werden.

das kann man zwar, ist aber unsauber und sollte man nicht machen. Es ist besser eine private variable noch mit zu nehmen auch wenn dies oft unnötig erscheint

03.02.2009 - 11:27 Uhr

hi,

da du einen java webservice konsumieren willst, musst bissl aufpassen. grundsätzlich ist das vorgehen so, dass du das wsdl-tool (wsdl.exe) nutzt, um deine proxy-klasse für net zu erstellen. danach kannst du die klasse nutzen um den aufruf zu machen.

Links:

WSDL Tool

How To: Call a Java EE Web Service from a .Net Client

Ansonsten hab ich noch ein Buch zu Hause über Interoperabilität von Net und Java

02.02.2009 - 15:54 Uhr

hi,

das verhalten ist eigentlich schon so korrekt. wird ein autoincrement schlüssel von der db abgerufen, steht dieser nie wieder zur verfügung. dabei ist es egal, ob er verwendet wird oder ob der eintrag nicht gespeichert wird. das muss so sein. stell dir mal vor, mehrere benutzer legen gleichzeitig ein datensatz an. würden alle die 2 bekommen, gewinnt am ende der, welcher als erstes speichert. das darf ja nicht sein. ist ne sicherheitsfunktion.

was hier noch nicht richtig läuft, ist das feedback der db. stelle mal in deinem dataset das autoincrement auf negative werte. diese werden dann bei einem speichern in der db (update mittels dbadapter) automatisch richtig vergeben.

22.01.2009 - 22:59 Uhr

hi,

bist neu in .net bzw. im coden, oder? aber jeder fängt mal klein an.

grundsätzlich ist dem datagridview die datenquelle egal, solange sie über die von ihm "vorgeschriebenen" wege überreicht wird. um damit deine 1. frage zu beantworten: such dir eine datenbank aus. ich arbeite gern mit firebird oder sql server ( gibts ja auch als express kostenlos). da gibts für beide datenbanken ado.net provider.

hast schon erfahrung mit ado.net?

ansonsten kannst du auch xml nehmen. lässt du deine xml datei zum beispiel über das dataset verwalten, kannst sehr leicht löschen oder hinzufügen. ansonsten gibts den weg über xml-dom oder ganz niedrige ebene, da xml ne text datei ist, immer neue datei schreiben. letzteres muss aber bei deinem vorhaben nicht wirklich sein.

wichtig ist, das du dir in der msdn mal das ado.net prinzip durchliest. MSDN

14.01.2009 - 15:40 Uhr

wenn du mit Website ne HTML-Datei meinst, dann geht das. Eine HTML-Datei ist doch nix weiter als ein Textdokument, was von einem Browser interpretiert wird. Erstell dir ein Template deiner HTML-Datei -> lass das Template einlesen und ersetze Platzhalter mit deinen Parametern

Bsp.:

Template: <html><body><select name="top5" size="3">
{OPTIONS}
</select></body</html>

nun liest du alle Optionen die unter {OPTIONS} gelistet werden sollen, aus deiner XML-Datei aus und bildest daraus nen String:

StringBuilder sb = new StringBuilder()
for(alle Werte ...)
sb.AppendLine("<option>Wert</option>");

und ersetzt am Ende {OPTIONS} mit dem String

20.10.2007 - 19:11 Uhr

Windows-Explorer->Ordner wo im IIS Virtuelles Verzeichniss hinterlegt ist und die Datei liegt ->Eigenschaften->Sicherheit

19.10.2007 - 23:27 Uhr

Moin, weil beim debuggen du als user genutzt wirst. ich denke mal dein benutzer-Account ist als administrator hinterlegt. ISS nutz aus sicherheitsgründen nen IUSER_XXX um skripts auszuführen. gib mal dem IUSER_XXX für deinen Rechner die Rechte an der Datei.

30.08.2007 - 15:15 Uhr

ich find den Firebird .Net Data Provider als ideales Anschauungsmaterial. Da hilft auch die Maillist gut weiter.

30.07.2007 - 14:13 Uhr

Hast du die richtige Sprache entsprechend deinem VS benutzt? Sonst funktioniert das nicht

25.07.2007 - 15:04 Uhr

Hi,

wie kann man die ganzen software factories von MS (web, smart, mobile) installieren, wenn man ein deutsches VS 2005 hat. Geht das überhaupt? Bei meiner englischen Version funktionierts einwandfrei. Nur hätte ich gern das auf nem anderen Rechner mit deutscher Version auch gerne installiert. Da werden aber unter Datei->Neu->Projekte keine Vorlagen angezeigt

24.10.2006 - 13:15 Uhr

Hi,

das musst du auch nicht. Dazu sind sogenannte DTO (Data Transfer Object) da. Das ist zum Beispiel ein DataSet. Prozessablauf: Anfrage an Server über z.B. Kundendaten -> Server (Business Logic) erstellt ein neues leeres (eventuell typisiertes) DataSet -> neues DataSet wird an die Data Logic (sprich die Schicht, die mit der DB kommuniziert) weitergegeben und befüllt -> Data Logic gibt DataSet an Business Logic zurück -> Business Logic gibt DataSet an Client weiter.

Das DataSet kann dann in der Binding eingesetzt werden. Anderes Vorgehen wäre statt DataSet eigene Objekte zu erstellen.

PS: das DataSet in Net 2.0 beinhaltet bereits die DataLogic mit dem TableAdapter

26.07.2006 - 12:31 Uhr

Hi,

das Problem liegt in PEAR::SOAP. Die Antwort vom Webservice wird nicht in eine SOAP-Nachricht verpackt. Es wird als normaler String innerhalb einer HTML-Seiter zurück geschickt. Kann aber auch nicht finden, wie ich das ändern muss damit es funktioniert. Dafür bin ich zu neu in dem Gebiet. ich hab jetzt NuSoap probiert und da geht es wunderbar. Falls jemand Interesse hat, ein paar schöne Links:

http://sanity-free.org/article25.html

http://www.scottnichol.com/nusoapintro.htm

http://www.pear-forum.de/ftopic1015.html

26.07.2006 - 00:49 Uhr

Hallo,

ich hab mir mit PEAR::Soap nen Webservice gebaut. Nun wollte ich gerne diesen über C# ansprechen. Hab mir dann von thinktecture das tolle Tool für VS runtergeladen und damit aus der WSDL nen Proxy gemacht.

Lief alles OK, nun kommt aber beim aufrufen einer Funktion ein Fehler:

System.InvalidOperationException was unhandled
Message="Der vom Client gefundene Anforderungsinhaltstyp ist 'text/html', erwartet wurde 'text/xml'.\r\nFehler: Leere Antwort auf Anforderung."
Source="System.Web.Services"

Nun gut dacht ich mir und änderte den Header in der PHP-Datei zu text/xml. Leider ohne Erfolg. Hat jemand schon einmal diese Richtung C#-Anwendung -> PHP Webservice gemacht. Anbei mal die WSDL. Macht eigentlich nix besonderes. Über ne Funktion getName wird ein String zurück gegeben.

25.07.2006 - 20:15 Uhr

Ja ist nicht enthalten. Hier muss das SQL Server Management Studio Express genutzt werden.

25.07.2006 - 15:38 Uhr

SQL SERVER MANAGEMENT STUDIO nicht SQL Server Configuration Manager

06.07.2006 - 14:13 Uhr

Hi, dazu gibt es auch schon einiges hier im Forum

  1. Login-Formular sollte kein Problem für dich sein.

  2. Datenbank oder Datei? Ich würde für Datenbank plädieren

  3. Passwörter als Hash-Wert (MD5, bei strengen Sicherheitsanforderungen SHA512) in DB speichern.

  4. Über Login Form, das eingegebene Passwort in Hash-Wert umwandeln und mit dem in DB vergleichen (Select Count(Password) from Table_User where Password=daseingegebenePasswort)

  5. Bei Erfolg nächstes Formular, sonst 2x weitere Chance und dann Programmabbruch

  6. Administrationstool: In DB schon ein Master-User und Master-Passwort hinterlegen. Admin kann sich anmelden und über ein User-Manager alle Einstellungen erledigen.

  7. In DB kann dann noch z.B. eine zeitliche Befristung hinterlegt werden

05.07.2006 - 15:27 Uhr

Bei dem neuen Management-Studio wird immer ein SQL-Script angelegt. Sehr praktisch (DB-Updates). Du musst nur noch in dem Script die rechte Maustaste -> Execute drücken.

28.06.2006 - 10:46 Uhr

kann auch sein, das der Designer alle Komponenten wieder auf private gesetzt hat. Der Inhalt der InitializeComponents-Methode wird beim VS glaub ich immer neu geschrieben. Deshalb soll man dort nix ändern, da die Änderung nach nur minimalen Änderungen an Eigenschaften der Controls durch überschreiben wieder verworfen wird.

Bei NET 2.0 sind das immer die xx.Designer.xx Dateien. Diese sollten nicht angerührt werden, da deren Inhalt wie gesagt eh wieder bei Änderungen verloren geht.

28.06.2006 - 10:24 Uhr

Hi ich merke gerade das funktioniert auch nicht mit der URL

geh mal auf http://www.microsoft.com/germany/msdn/library dort gibt es links
ein .NET-Entwicklung->Verteilte Applikationen->Das .NET Remoting Framework - Entwicklung verteilter Anwendungen

28.06.2006 - 10:17 Uhr

Hi,

schau mal hier:

http://www.microsoft.com/germany/msdn/library/net/DasNETRemotingFrameworkEntwicklungVerteilterApplikationenAufBasisDesNETFrameworks.mspx

Was meinst du mit Webtemplate?

PS: musste die URL so blöd darstellen, da er sonst es immer falsch umgewandelt hat

26.06.2006 - 15:28 Uhr

Hi,

ähm ok jetzt versteh ich dich besser. Also: ich selber geh nie den Weg weil ich immer im Code die TD's erstelle. Hintergrund ist die von mir bereits erwähnte Trennung nach Tiers und Layern.

Schau mal bitte in der Methode InitializeComponents() in der FormX.Designer.cs nach. Ich denke für jedes Formular wird dort eine neue Variable und Instanz des TD angelegt. Du willst aber, das es auf einem Formular liegt und nur eine Instanz also nur 1x vorkommt und dann von jedem Formular aus zugreifbar ist.

Wenn das nicht der Fall ist, dann kannst du das über eine statische Variable lösen
Bevor ich viel rede nen Code-Bsp:

public class DataModul:CustomControl
{

   private UTD _MyData;

   #region Singleton-Implementierung
   // sichert die einmalige Existenz einer! Instanz von DataModul zur Laufzeit
   // nähere Infos zu Singleton hier im Forum oder z.B. bei wikipedia.de
   private static readonly DataModul _Instance;

   private DataModul()
   {
      //Constructor

      this._MyData = new UTD();
      ... // DataSet füllen
   }

   #endregion

   public static DataModul GetDataModulInstance()
   {
      if(DataModul._Instance == null)
         DataModul._Instance = new DataModul();
     
      return DataModul._Instance;
   }

   public UTD MyUntypedDataProperty
   {
      get{ return this._MyData;}
   }
}


public class FormX:System.Windows.Forms.Form
{
   ...

    public void DoSomethingWithUTD()
    {
         UTD = DataModul.GetDataModulInstance().MyUntypedDataProperty;
         ... // UTD verwenden
    }
   ...
}

Vorteil vom Erben von CustomControl ist, das du den Designer nutzen kannst.

26.06.2006 - 11:05 Uhr

Zu deinem letzten Vorschlag, muss ich mich erst mal genauer Informieren. Sieht aber auf den ersten Blick so aus, als müsste man hierfür sein Projekt von Anfang an komplett so aufbauen.

Ja, da muss von Anfang an so geplant werden.

Was mich wundert: Ich hab einen typerisierten Dataset (eine Temp-Tabelle) den ich in jedem Formular verwenden kann. Warum kann ich das nicht auch irgendwie mit einem untyperisierten generierten Dataset realisieren?!?

Ähm, verstehe ich nicht ganz. Ein typisiertes Dataset (TD) ist nur eine Klasse, welche ein untypisiertes Dataset (UTD) umhüllt. Das TD stellt über Properties oder Funktionen einen typensicheren Zugriff auf Tabellen und Inhalten zur Verfügung. Das gleiche kannst du auch mit einem UTD erreichen.

Inwiefern kannst du ein TD überall verwenden. Hast du irgendwo eine Instanz auf ein TD erstellt, auf welche man über ein Propertie zugreifen kann?

public class xx
{
   // TD = typisiertes DataSet;
   private TD _data = new TD();

   public TD Data
   {
       get { return this._data;}
   }

}


public class y
{
   public void DoSomething()
   { 
      xx ClassXXVar = new xx();
      TD publicData = ClassXXVar.Data;
   }
}
26.06.2006 - 09:58 Uhr

Hi,

schau mal hier:

http://www.entwickler-forum.de/webx?50@228.XqHhabi7ltB.2@.2cb7d398

PS: du kannst auch einfache UserControls nutzen. Musst sie ja nicht anzeigen.

Es gibt noch 2 andere Wege:

  1. Basis-Formular mit Connection, von der du alle weiteren ableitest

  2. völlig anderes System. GUI und Application völlig trennen. MVC oder 3-tier sind hier Stichpunkte. Bevor ich das wieder erkläre, verweise ich lieber auf die Suche hier im Forum. Da sind ein paar richtig gute Threads dabei, wo es wunderbar erklärt wird. Stichworte: MVC, 3-tier, n-tier, Layer

21.06.2006 - 11:31 Uhr

Hi,

ich hab jetzt die besagte ioStor.sys ersetzt. Dauert zwar immer noch ewig bis der Auswahl-Dialog kommt, aber es kommt wenigstens kein Fehler und kein BlueScreen mehr. Was mich dennoch wundert ist, dass es eben nur innerhalb von VS bei dem Referenzen-Dialog aufgetreten ist.

20.06.2006 - 13:41 Uhr

Hi,

eigentlich hab ich nichts installiert in letzter Zeit. Außer halt Firebird Net Dataprovider. Nichts jedoch was mit Intel zu tun haben könnte. Ich hab noch Windows Update vor kurzem gemacht. Vielleicht kam da ja was mit.

Ich hab es jetzt mal geschaft keinen BlueScreen zu bekommen. Es kam eine Fehlermeldung wo er mir sagte, das er in eine Datei xxx.evt nicht schreiben konnte. D.h. er konnte irgendetwas nicht ins Event-Log (würde sagen System-Eventlog) schreiben. Im Hintergrund wurde aber der Auswahl-Dialog für Assemby-Referenzen angezeigt. In dem konnte ich nach einem Klick auf OK auch zugreifen.

20.06.2006 - 11:29 Uhr

Hi,

hab noch was getestet. Mit SharpDevelop 2 kann ich ohne Probleme Referenzen bei einem Projekt hinzufügen. Scheint also doch an VS zu liegen.

20.06.2006 - 11:20 Uhr

Hi,

also beim BlueScreen kommt folgende Meldung:

Es wurde ein Problem festgestellt. ...

DRIVER_IRQL_NOT_LESS_OR_EQUAL

....

*** STOP ....
*** iaStor.sys - Address ...

20.06.2006 - 10:57 Uhr

Hi talla,

der läuft so schnell durch, dass man nichts erkennen kann. Kann ich den irgendwie kurz stoppen?

20.06.2006 - 10:45 Uhr

Hallo Leute,

seit kurzem hab ich das Problem, dass ich ein BlueScreen bekomme, wenn ich dem Projekt (egal welches neu oder alt, groß oder minimal) über Add Reference eine neue Referenz auf eine Assembly einstellen will. Visual Studio funktioniert sonst einwandfrei. Bevor ich versuche VS neu zu installieren, wollte ich lieber nachfragen.
Der BlueScreen erscheint seitdem ich den Firebird client 2.0 RC5 installiert habe. Dort konnte man den FB Client ins VS integrieren. Ich habe allerdings schon alle Registry-Einträge und machine.config Einträge entfernt.

19.06.2006 - 13:23 Uhr

Auch wenn die Selbständigkeit bei der Problemlösung nicht abhanden kommen und hier nicht fertiger Coder überreicht werden soll, fände ich es gut, wenn solche Links auch hier gepostet würden.

Hintergrund: Manchmal sind solche Suchen bei MSDN oder anderen Sachen doch sehr spezifisch auf die Suchworte ausgerichtet (Groß- und Kleinschreibung etc.) und man kann nicht immer das finden, was andere schnell finden. Es ist einfach eine schöne Hilfe zur Selbsthilfe.

Bitte postet doch mal den Link dorthin.

19.06.2006 - 11:01 Uhr

Original von .unreal
Können ja, tun denke ich nicht!

Da ich solche Antworten nicht mag und das beim DataGridView nicht direkt ersichtlich ist:

DataGridView dgv = new DataGridView();

DataGridViewTextBoxColumn col1 = new DataGridViewTextBoxColumn();
// Spaltenüberschrift setzen
col1.HeaderText = "Überschrift";
//Bei Anbindung an Datenquellen den entsprechenden Member z.B. Property oder Spaltenname in einer DataTable bennenen
col1.DataProperty = "Spalte1_inDatasetX";

dgv.columns.Add(col1);

dgv.DataSource = DataSetXY
dgv.DataMember = "TabelleXY";

Ansonsten über die Hilfe zu schönen Features der einzelnen DataGridViewXXColumns anschauen. Z.b das Auffüllen der Spalte bis zum Rand, falls es die letzte ist.

Neben DataGridViewTextBoxColumn gibts noch weitere Steuerelement. Tragen alle DataGridViewXXXColumn im Namen

13.06.2006 - 10:31 Uhr

Soweit ich weiß unterstützt ODBC Connection-Pooling. D.h. wenn du eine Connection öffnest oder schließt wird die Verbindung zum DB-Server nicht wirklich geöffnet oder geschlossen. Daher ist es egal ob du using oder einen Member nimmst. Die "schwere Arbeit" der Datenbankverbindung zum Server aufbauen ist bei beiden gleich. Bei using kannst du "sicher" sein, das das Objekt (Instanz) der Connectionklasse freigegeben wird (bzw. an den Garbage-Collector übergeht). Beim Member hast du den Vorteil, das du nicht jedes mal ein neues Connection-Objekt initialisieren musst (ich meine hier nur das Objekt, ohne die Verbindung zum DB-Server aufzubauen)

08.06.2006 - 12:42 Uhr

Hi,

könnte ein Rechteproblem sein. Ich geh davon aus das es ein Net-Webservice ist der über IIS läuft. Wenn beim IIS anonymer Zugriff an ist, muss Impersonate auf einen User mit Schreibrechten durchgeführt werden

06.06.2006 - 15:41 Uhr

Hi,

vielleicht wären hier die englischen Vokabeln "tier" und "layer" besser gewesen. Z.b ne 2-tier-application mit 3 Layern.