Laden...
Avatar #avatar-1775.jpeg
norman_timo myCSharp.de - Member
Dipl.-Ing. (BA) Informationstechnik Wald-Michelbach (Odw) Dabei seit 13.07.2004 4.506 Beiträge
Benutzerbeschreibung

Forenbeiträge von norman_timo Ingesamt 4.506 Beiträge

28.01.2009 - 11:51 Uhr

Hallo zusammen,

erinnert mich irgendwie an meine Schulzeit, wo wir im "ITG" (Informationstechnische Grundlagen) unterrichtet wurden. Dort haben wir auch "Net Send" wie die "blöden" verwendet, bis nach 5 Minuten die Sekräterin reinkam und damit gedroht hatte alle Rechner auszuschalten, weil sie nicht mehr arbeiten kann 😉

Aber damals war ich 14 und das war in der Schule. Ich kann hier auch nur sagen, Du verwendest hier ein Programm, dessen Reichweite Dir nicht bewusst ist, außerdem vertrittst Du als externer Mitarbeiter Deine Zeitarbeitsfirma, weshalb da schon alleine doppelte Seriösität angesagt ist.

Und dann sitzt Du in einer Schulung (immer noch als externer Mitarbeiter), was die Firma xyz Geld kostet, da kann man erwarten, dass Du Dich geistig der Schulung widmest, und keinen Unfug treibst, das alleine berechtigt meiner Meinung nach auch zur fristlosen Vertragsaugfhebung (man konnte Dir nachweisen, dass Du Dich nicht auf die Schulung konzentriert hattest).

Also so böse wie das nun klingt:
Werde erwachsen, und sei Dir bewusst, dass Du für Dein Geld arbeiten musst.

Grüße
Norman-Timo

28.01.2009 - 10:28 Uhr

Hallo azatoth,

bin mir nicht 100%ig sicher, ob das so funktioniert, wäre aber auszuprobieren:

* MouseEnter und MouseMove Ereignisse abfangen
* Darin dann entsprechende Mausposition berechnen und Icon ermitteln, wo die Maus grad drüber ist
* Dann entsprechende Iconmodifikationen durchführen
* Und bei entsprechenden eigenen Modifikationen dann NICHT! die Basisklasse und dessen Ereignishandler aufrufen lassen

Aber das ist jetzt rein aus dem Kopf entstanden und nicht verifiziert worden.

Grüße
Norman-Timo

28.01.2009 - 09:29 Uhr

Hallo tomot,

So wie ich das sehe, sagst du, es würde mit Einschränkungen im 3-Schichten-Modell mit einer (oder mehreren) Factory funktionieren?

Ich würde einfach behaupten, dass eine strikte Schichtentrennung sehr gut ist, ist aber abhängig von Projektgröße und dem Ziel was man verfolgt. Die konsequente Aufteilung in verschiedene Schichten ist erstrebenswert aber auch sehr aufwändig, für sehr kleine Ziele eventuell einfach nur oversized.

Welche Objekte soll denn die Factory alles herstellen? Nur die Logging/Exceptionhandling/Settings-Objekte, oder potenziell alle Objekte, die auf solche Objekte zugreifen sollen?

Hier kann ich JuyJuka nur bestätigen, am Besten alle, und er hat das richtige Stichwort hier schon erwähnt: "Microkernel". Ich würde über einen BL-Manager (Factory) alle Objekte liefern lassen, die eine BL repräsentieren. Hierbei wird ein konkretes Objekt mit Hilfe eines Interfaces zurückgeliefert.
Ich bin hier der Meinung, dass es auch eine gemeinsame DLL geben sollte, die alle Interfacedefinitionen enthält (so dass die BL und die Nutzschicht (Gui) auf der gleichen Basis arbeiten). Das Prinzip kann man zwar auch noch entkoppeln, allerdings steigt hier dann der Aufwand exponentiell, hier könnte man z.B. das SOA Prinzip verfolgen, anstatt eine gemeinsame Interface-Dll zu haben, das ist dann aber wirklich Architekturentscheidung.

Aber wie halte ich dann die Referenzen auf die von der Factory erzeugten Objekte?

Der BL/DAL Manager sollte ein Singleton sein. Und dieser entscheidet dann ja nach Anwendungsfall, ob die eigentlichen BL/DAL Objekte dann weitere Singletons sein sollten und gibt deshalb nur die einzige Referenz heraus, oder er erzeugt jedes Mal eine neue Referenz, eben wie gesagt je nach Anwendungsfall.

Weiterführende Techniken in dieser Richtung sind z.B. IOC (Inversion of Control). Das Prinzip verfolgt die Lösung der statischen Kopplungen durch das "Hauptprogramm". Dabei werden entsprechende Module per Microkernel angebunden, und jedes Modul entscheidet für sich, ob andere Abhängigkeiten zu anderen Modulen gebraucht werden und fragen den Microkernel an.

Es kostet sehr viel Zeit sich in diese gesamten Themen einzuarbeiten, und es kostet nochmal mehr Zeit diese alle zu begreifen, denn das hat nicht mehr viel mit "Programmieren" zu tun, ich würde mal so sagen, das ist Softwarearchitektur und kein Design mehr.

Grüße
Norman-Timo

27.01.2009 - 15:56 Uhr

Hallo zusammen,

entweder ich bin zu blöd für das Ganze, oder es ist eine "Geheimsache", die ich nicht verstehe?
Was zum Henker hat es sich denn mit Cheezburgern, Lolcats, Lolbuilder etc. auf sich?

z.B. auf dieser Seite soll angeblich der "tolle" Ursprung des Gedanken zu finden sein:
Lol and Lolcat builder

Selbst die Erklärung im Wiki habe ich nicht verstanden:
Wikipedia - I can has cheezburger?

Was haben Katzen mit Cheesburgern zu tun, und warum finden sehr viele Menschen die Seite so toll? Kann mich jemand aufklären, Bitte!?

Grüße
Norman-Timo

26.01.2009 - 14:45 Uhr

Hallo Herbivore,

Danke für die schnelle Umsetzung, das war wirklich fix 😉

Ich will da eigentlich nicht weiter rummosern, aber ich konnte das erst als Link erkennen, nachdem ich intensiv danach gesucht habe. Kann man den optisch nicht anders gestalten, so dass er als Link zu erkennen ist? Oder ist das absichtlich nicht gemacht, damit "lästige" Nachfragen "Was sind denn Stoppworte?" entfallen?

Grüße
Norman-Timo

26.01.2009 - 14:07 Uhr

Hallo Herbivore,

gibt es eine Möglichkeit zu erfahren, was denn aktuell alles Stoppworte sind? Toll wäre es, wenn diese als Link auf der Suchen Seite aufgezeigt werden könnte.

Grüße
Norman-Timo

26.01.2009 - 08:58 Uhr

Hallo zusammen,

ich formuliere das immer sehr hart:
Wenn es wirklich getrennte Schichten sein sollen, dann sollten selbst die Projekte untereinander sich nicht direkt referenzieren. Theoretisch ist nur dann ein Schichtenmodell "richtig" umgesetzt, wenn die einzelnen Schichten auch auf verschiedenen Rechnern laufen können, und die Applikation funktioniert dann noch.

Aber die Realität sieht anders aus. So hart kann man das nicht immer aufziehen. Ich würde das Projektgrößenabhängig machen.

Schichtentrennung im logischen Sinne sollten über Factories und Interfaces realisiert werden. Dann am Besten noch einen Microcontroller und das IOC Prnzip angewandt, dann ist man schon auf einer sehr dynamischen Seite.

Mal genau auf Deine Punkte eingegangen, Tomot:

  1. (Bis auf die angesprochenen Referenzen, die geduldet werden können) ist ein Aufbau in versch. Projekte sehr sinnvoll
  2. Ja, das ist wie in der Vererbung bei der OOP, der Vater soll und darf keine Kinder kennen. Hier würde ich DB -> DAL -> BL -> GUI als Hierarchie ansehen. Mit einer Einschränkung, dass nämlich vice versadie untere Schicht nur die nächsthöhere kennen und verwenden sollte.
  3. Das ist richtig, Du solltest definitiv in der BL keine GUI spezifischen Objekte verwenden, verwende definierte Schnittstellen, z.B. O/R-Mapper oder DataSets oder proprietäres
  4. Hier wäre der Weg über die DAL sicherlich die Konsequenteste. Und nun kommen wir zum Knackpunkt, den Du richtigerweise erkannt hast. Hier kann es durchaus passieren, dass die BL und DAL künstlich aufgebläht werden, und hier ist auch durch Anforderungsanalyse genau zu definieren, was gebraucht wird, und was nicht.
    Wenn Du aber die GUI austauschen können lassen musst, dann musst Du beide Varianten (Console und WinForm (und vielleicht ASP.NET?)) in der BL und DAL vorsehen, egal ob das benötigt wird oder nicht.
    -> Das sind die Punkte wo ich sage, da weicht die Realität von der Theorie ab.
    5+6) Das sollte per se so nicht realisiert werden. Für die GUI wird es in der BL eine Factory geben, und für die BL wird es in der DAL eine Factory geben. Wenn nun Objekte überall gebraucht werden sollen, dann müssen die Objekte über Interfaces und über die Factories durchgereicht werden.
    -> Auch hier kommen wir zu einer Möglichen Abweichung. Wie soll die GUI z.B. etwas Loggen, wenn die BL nicht erreichbar wäre. Ein Logger-Objekt gibt es da (noch) nicht!? -> Hier muss ganz klar vom 3 Schichten-Modell Abstand genommen werden, und für die Initialisierungsphase in jeder Schicht für sich eine proprietäre Möglichkeit erschaffen werden, die solche Dinge realisiert. Sobald festgestellt wurde, dass die darüberliegende Schicht erreichbar ist und die zentralen Objekte benutzbar werden, kann man umschwenken und mit Hilfe dieser Objekte dann ein Logging/Exceptionhandling/Settingmöglichkeit realsieren.

So nun genug theoretisiert 😉

Grüße
Norman-Timo

23.01.2009 - 10:05 Uhr

Hallo zusammen,

das kann alles Möliche sein:

* Eine COM Dll, die beim ersten Rechner korrekt registrier ist, beim 2. nicht
* Eine Referenz-DLL, bei der die Eigenschaft "CopyToLocal" auf "False" gestellt ist, beim 2. Rechner dann nicht im GAC oder Ausführungsverzeichnis liegt
* Kaputtes .NET Framework
* Unterschiedliche VS Versionen, und die Verwendung von Dll's, die nur bei/ab einer bestimmten VS-Version dabei sind.
* .NET SDK installiert / nicht installiert
* Windows Updates, die vielleicht relevante DLLs verändert haben

Ich hör jetzt einfach mal auf aufzuzählen.

Also bitte:
Was ist das für eine DLL und wie hast Du sie eingebunden.

Grüße
Norman-Timo

22.01.2009 - 21:27 Uhr

Hallo Ares,

ja so wie ich auch im Beitrag geschrieben habe, im EventHandler dann einen asynchronen Aufruf, wie z.B. "Invoke".

Übrigens siehst Du ein ähnliches Vorgehen in dem Remoting Beispiel von mir aus Deinem anderen Thread (Event in einem anderen Thread-Kontext).

Grüße
Norman-Timo

22.01.2009 - 16:11 Uhr

Hallo Ares,

Aber wenn der Init-Thread ein Event auslöst findet ja auch die Reaktion in diesem Thread statt.

Das ist richtig, aber ist das schlimm? Soll heißen, als allerletzte Aktion feuerst Du ein entsprechendes "BinFertig"-Event. Der Abonnierer (z.B. WinForms-Anwendung) erfährt dies und reagiert mit einem asynchronen Aufruf in seinem Thread (z.B. WinForms-Anwendung).

Im Falle einer WinForms Anwendung ist das z.B. sehr elegant mit "IsInvokeReuired" und dem "MethodInvoker" realisierbar.

Grüße
Norman-Timo

22.01.2009 - 16:07 Uhr

Wenn hier schon von Notfalldaten gesprochen werden, dann gibt es auch folgende Infoquelle:
Weil aktuell: Elektronische Gesundheitskarte

Geht übrigens sehr genau in die selbe Richtung die Diskussion um die Gesundheitskarte 😉

22.01.2009 - 15:56 Uhr

Hallo zusammen,

ich muss zugestehen, dass ich ziemlich die gleichen Erfahrungen wie Khalid gemacht hab (Beitrag von 14:56 heute).

Ich war bisher bei einigen kleineren bis mittelständischen Unternehmen, bei denen Codedesign darin bestand es kompilierfähig zu machen.
Inzwischen bin ich in einem Großunternehmen und arbeite in einem richtig großen Projekt, bei dem es schlichtweg bedeutet: In einer Tagesverarbeitung auf dem Produktivsystem steckt so viel Kohle drin, dass es einfach nicht bezahlbar wäre, wenn das System grob fehlerhaft wäre.

Da in der heutigen Zeit aber auch Softwareänderungen in der Tagesordnung zu finden ist, muss alles eben hochgradig dynamisch und konfigurativ gelöst werden.

Bei uns ist es so, dass bei einer Beauftragung es ca. 3-6 Monate dauert bis angefangen wird zu programmieren (Ausnahme Proof of Concepts [Machbarkeitsstudie]). Bis dahin werden Scope- und Designsitzungen mit Kunden, Projektleitern und auch Entwicklern gemacht.

Deshalb kann ich nur bestätigen, in der breiten Masse wird wahrscheinlich QuickAndDirty Programmierung vorzufinden sein, aber wenn man das Vergnügen hat, in einem strukturierten Projekt mitzuarbeiten, dann will man nicht mehr anders.

Grüße
Norman-Timo

22.01.2009 - 11:48 Uhr

Hallo ths,

RPC ist eine allgemeine Anforderung entfernten Code zur Ausführung zu bekommen, daher auch sein Name "Remote Procedure Call". Das ist allerdings ein allgemeiner Begriff, der zunächst nichts über die angewandte Technologie mit der das erreicht werden soll aussagt.

WebService ist eine Form, um RPC zu realsieren. Hier ist aber klar definiert um was für eine Technologie es sich handelt. HTTP, Soap und WSDL etc. Das würde ich als Technik bezeichnen.

SOA ist ein Abstraktionsmodell mit der Applikationen entwickelt werden können. Das Modell beschreibt, wie schon dem Namen nach zu urteilen (Service Orientated Architect), eine Struktur in der alle Programmlogikbausteine in Services zu packen sind, und damit dann der Programmfluss und -steuerung offen gehalten werden kann. Meist wird hutzutage für SOA WebServices eingesetzt (Modell -> Technik (Umsetzung)), aber auch ein altestümlicher Filetransfer mit FileSystemWatcher würde dem SOA Prinzip entsprechen.

Ich denke so kann man die Begriffe gegeneinander abgrenzen.

Grüße
Norman-Timo

22.01.2009 - 10:25 Uhr

Hallo Karle123,

mittels "XmlNode.ChildNodes" bekommst Du alle Kindsknoten (ach was ein Wunder bei dem Namen 😁 ), um aber an die Informationen zu kommen, die Du beschrieben hast, muss man zusätzlich zu jedem Knoten seine "Attribute" und deren Inhalt ("Value") abfragen.

Das geht dann mit "XmlNode.Attributes" und liefern dann ein "XmlAttribute". Das müsstest Du noch zusätzlich in Deine Schleife einbauen, dann sollte alles funktionieren.

Grüße
Norman-Timo

22.01.2009 - 10:11 Uhr

Hallo thomas.at,

"Synchronisation Service" Yup, auf so etwas in der Art wollte ich hinaus.

Aber auch Oracle bietet mit seinen Datenbanken fertige Technologien an. Stichwörter wären hier "Cold/Warm/Hot Standby" und / oder "High Availibility" etc. All diese Technologien lassen sich auch Nutzen, wenn man eine Offline-DB haben möchte. Das ist quasi ja nichts anderes.

Siehe auch Oracle Dokus:
[PDF] Oracle - Hochverfügbarkeit (Übersicht)
[PDF] Oracle - Hochverfügbarkeit (komplettes Dokument ca. 1,5 MB)

Viele Grüße
Norman-Timo

22.01.2009 - 10:05 Uhr

Hallo Herbivore,

nicht erst mit 2.0, sondern das war von Anfang an so.

So weit ich das noch in Erinnerung habe, verursachen im .Net 1.1 (und kleiner) unhandled Exceptions innerhalb von Threads keinen Applikationsfehler, sondern sind irgendwie im Sande verlaufen.

Deshalb hatte ich geschrieben, dass ab 2.0 diese unbedingt threadbezogen verarbeitet werden müssen. Ich habe damals noch "unschön" programmiert, indem ich einfach unhandled Exceptions überhaupt nicht betrachtet habe, und es einfach billigend in Kauf genommen, dass der Thread stirbt.
-> Saubere Programmierung ist etwas anderes, daher sollten immer und so kurz gefasst wie möglich alle Exceptions gefangen und behandelt werden, auch wenn sie dann letztendlich zum regulierten Applikationsende führen.

Grüße
Norman-Timo

21.01.2009 - 17:10 Uhr

Hallo zusammen,

die übergebene URI definiert quasi den FTP Server, mit dem sich bei der Ausführung verbunden werden soll. Man kann hier auch einen Einstiegspfad wählen, in das automatisch gewechselt werden soll.

Eine Verzeichnisänderung hat praktisch nichts mit einer URI zu tun, es soll ja immer noch der gleiche FTP Server verwendet werden.

Hier bietet die FtpWebRequest leider nur sehr wnige Hilfmittel, aber wenn ich das nun in der Hilfe richtig gelesen habe, das Allerheilmittel MSDN - FtpWebRequest.Method Eigenschaft in dem man (wenn ich das richtig interpretiere) eigene FTP Befehle absenden kann.

Probiert doch einfach mal den Befehl "cd [Verz.]" ([Verz] = Angabe des Verzeichnisses in das gewechselt werden soll in relativer Schreibweise zum aktuellen Verzeichnis).

Eventuell funktioniert das.

Ansonsten kann ich nur zu anderen FTP Helferklassen verweisen, da das .NET Framework hier keine wirklich komfortablen FTP Klassen zur Verfügung stellt (leider).

Grüße
Norman-Timo

21.01.2009 - 16:54 Uhr

Hallo Zentauro,

mit dem .NET Framework 2.0 sind auftretende Exceptions Threadbezogen zu fangen und zu verarbeiten. Ansonsten wird die ganze Applikation runtergerissen.

Deshalb ist Deine 2. Variante nicht sehr geschickt, weil Application.Run() intern mit sehr hoher Wahrscheinlichkeit mit einem neuen Thread arbeitet (bin mir da aber nicht 100%ig sicher).

Aber selbst wenn dem noch so wäre, sobald in Deiner Applikation ein neuer Thread eröffnet wird, wirst Du ihn mit einem catch um die Main-Funktion nicht gefangen bekommen.

Deshalb die Variante mit den ThreadExceptions und der AppDomain. Diese Varianten sollten meinem Verständnis nach "alle" Exceptions auffangen können.

Siehe hierzu auch:
Eigene Exceptions in einem Thread werden nicht abgefangen
Try / Catch über mehrere Schichten - Wo gehören sie hin
Globale Fehlerbehandlung

Grüße
Norman-Timo

21.01.2009 - 16:37 Uhr

Hallo Schamese,

gab es schon ein paar mal hier im Forum; Einstiegspunkt z.B.: EncodingHelper, Encoding zur Laufzeit auslesen

Grüße
Norman-Timo

Edit: Zu spät, schade 😉

21.01.2009 - 16:25 Uhr

Hallo christKIN_D,

ich verstehe Deinen geposteten Code überhaupt nicht. Du sagst, dass Du HTML Code hast, wieso redest Du dann in Deinem Betreff von XML? Oder kannst Du mit Sicherheit sagen, dass es XHTML ist?

Deine Funktion nimmt einen String-Parameter, warum? Warum nimmst Du für Deine XML-Transformation nicht direkt die Datei?

Und zu guter letzt, nur weil bei einer XML-Transformation XAML herauskommen kann, muss man es nicht als *.xml abspeichern, sondern Du kannst direkt das XAML-File erzeugen lassen.

Entweder siehst Du vor lauter Bäumen den Wald nicht mehr, oder ich habe Dein Problem nicht einmal im Ansatz verstanden 🤔

Grüße
Norman-Timo

21.01.2009 - 16:02 Uhr

Hallo daprodigy,

da schau mal hier:
Chris Crowe's Blog - Setting NTFS Directory / File ACLS

Viele Grüße
Norman-Timo

21.01.2009 - 14:39 Uhr

Hallo daprodigy,

Administrativ (über den WinExplorer) oder via C#-Code?

Grüße
Norman-Timo

21.01.2009 - 14:36 Uhr

Hallo Saba2k6,

bitte die Suchfunktion nutzen:
Update einer Abfrage mit Inner Join Abfrage geht nicht

Grüße
Norman-Timo

21.01.2009 - 13:59 Uhr

Hallo zusammen,

bei solchen Aktionen wird mir immer wieder ein wenig übel. Wenn eine DB-Synchronisation erforderlich ist, dann mache ich das normalerweise über Datenbank-Tools, die auch direkt mit und in der Datenbank arbeiten. Alles andere ist in aller Regel gebastel.

Klar, eine Synchronisation mit 9i und Express10g kann nur gepfriemel werden.

In einem solchen Fall würde ich fast hergehen und auf das inkrementelle Update verzichten und einen Komplett Dump ziehen und diesen dann in der Express aufspielen.

Das kann aber nur dann einigermassen funktionieren, wenn es die Laufzeit auf dem Echtserver nicht zu sehr einschränkt und wenn die Gesamtdatenmenge sich im Rahmen hält.

Eine Eigenimplementierung ist normalerweise sehr aufwändig und fehlerlastig, wenn auf dem Server keine Modifikationen vorgenommen werden dürfen.

Grüße
Norman-Timo

21.01.2009 - 13:52 Uhr

Hallo zusammen,

zum Thema Access und 2 verschiedene Datenbankdateien siehe auch:
MS Access OleDB Link
zwei Access Tabellen aus verschiedenen DB verknüpfen

Grüße
Norman-Timo

21.01.2009 - 13:40 Uhr

Hallo Ares,

so mit einer kleinen Erkältungsverzögerung hier mein versprochenes kleines Beispiel. Da ich das Original Beispiel nicht mehr zur Hand hatte, habe ich ein speziell auf Deine Bedürfnisse zugeschnittenes Beispiel entwickelt.

Beschreibung:
Es gibt 3 Projekte innerhalb der VisualStudio-Solution
* RemoteClient:
Das ist eine Konsolenanwendung, die sofort beim starten in den "Eingabemodus" wechselt, und Zeile für Zeile Text einliest und über das Remoting-Objekt diesen versendet. Zum Beenden des Clients einfach "exit" eintippen.
* RemotingObjects:
Das ist die gemeinsame Schnittstelle zwischen Client und Server, also enthält es auch das Interface. Daneben noch eine allgemeine DelegateDefinitionsdatei für das Ereignis innerhalb des Remoting-Objekts
* RemotingServer:
Eine Windows Forms Anwendung, die zunächst erst einmal eine Instanz vom Remoting-Objekt erstellt (aber noch ohne Remoting) und sich für das TextAvailable Ereignis registriert. Erst danach wird das schon instanziierte Objekt über Remoting bereitgestellt.

Zur Ausführung des Tests muss natürlich zuerst der Server gestartet werden, dann der Client. Firewall Einstellungen sind auf diesem Rechner zu überprüfen, ob ein HTTP Verkehr auf Port 1234 zugelassen wird. Jeglicher Text, der im Client eingegeben wird, wird über das Remoting-Objekt gesendet und durch die Ereignisauslösung im Server dann in der Textbox angezeigt.

Ich hoffe das Beispiel zeigt sehr deutlich, dass es ohne Probleme möglich ist Serverfunktionalität auf dem Server via Remoting auch dem Client zur Verfügung zu stellen (auch ohne, dass der Server gleichzeitig als Client fungiert).

Viele Grüße
Norman-Timo

21.01.2009 - 13:28 Uhr

Hallo tkrasinger,

ich glaube, dass das bei Konstruktoren nicht geht. Diese werden ja nicht mitvererbt, weshalb es da auch schwierig ist über Reflection dran zu kommen. Aber selbst wenns theoretisch gehen würde müsste man das mit hoher Wahrscheinlichkeit in GhostDoc implementieren und ist nicht konfigurativ zu lösen.

Viele Grüße
Norman-Timo

21.01.2009 - 10:57 Uhr

Hallo tkrasinger,

ich habe für GhostDoc immer die Standardconfiguration installiert undnicht modifiziert. Ich gehe dann so vor, dass ich zunächst das Interface anlege, und alle Methoden darin dokumentiere. Danach abspeichern.

Bei der betreffenden Klasse lasse ich dann die Methodenrümpfe über VS automatisch hinzufügen, indem ich nach dem Klassenname das Interface angebe, und im Optionsmenü das implizite Generieren auswähle.

Danach muss ich noch direkt jede genrierte Zeile anklicken, und die GhostDoc-Tastenkombination drücken, damit übernimmt er die Kommentare aus dem Interface.

Also alles ohne irgendwelche Manipulationen, also als Standardverhalten.

Habe Dir trotzdem mal die Standardkonfiguration hier mit angehängt, vielleicht hast Du eine manuelle erstellt, dann kannst Du vergleichen.

Grüße
Norman-Timo

20.01.2009 - 11:20 Uhr

Hallo BerndFfm,

das ist echt ne nette Idee, zumindest für jemanden, der mit dem HTML Quelltext nicht umgehen kann ist das eine unüberwindbare Hürde 😉

@all:
ich nehme jetzt genau aktuelles Fenster (in dem ich diesen Beitrag verfasse) als Beispiel. Hier sind Bilder so definiert:


         <iframe src="http://mycsharp3.de/terrashop/Default.aspx" width="120" height="330" scrolling="no" frameborder="0">
           <a href='http://www.terrashop.de/buecher/prog/?r=mycsharp_1106' target='_blank'>
             <img src='http://mycsharp.de/partner/terrashop.gif' border='0' alt='terrashop.de' />
           </a>
       </iframe>

der Link zum Terrashop Bild ist hier direkt ansprechbar, und damit er angezeigt werden kann, wird er vom Browser heruntergeladen. Also jeder der den Quelltext aufmacht kann die Bilder (die der Browser auch anzeigt) herunterladen, wenn er dem Link folgt.

Grüße
Norman-Timo

16.01.2009 - 14:58 Uhr

Hallo Ares,

ich müsste zu Hause noch einmal schauen, ich habe mal ein kleines Remoting Beispiel geschrieben. Ich kann Dir nicht versprechen, ob ich es wieder finde, aber wenn, dann zeigt es genau Deinen Anwendungsfall.

Ich habe das Beispiel als Prototyping für eine Umsetzung für ein Produkt eines ehemaligen Arbeitgebers gemacht. Den Quellcode dafür habe ich nicht mehr. Ich weiß aber, dass der Server das Remoting Objekt bereitgestellt hat, selbst abonniert hat (als eigener Client dann), und damit konnte ich dann eine Schnittstelle bedienen und bedienen lassen.

Bei uns war es so, dass das Remoting Objekt als eine Factory für die Backendmodule gedient hat. Somit konnte der Client über die Factory auf serverseitige Module zugreifen (über Interfaces, deshalb wichtig, weil ansonsten die Dll's auch dem Client bekannt sein müssten), und konnte diese dann bedienen.

Wie gesagt, ich habe den Prototypen zu Hause, und käme erst Morgen dazu ihn zu posten, falls ich ihn überhaupt noch finde.

Grüße
Norman-Timo

16.01.2009 - 11:31 Uhr

Hallo zerberos,

hab nun nicht wirklich mehr die Erinnerung, wie das genau funktioniert, hier mal meine Vermutungen:

Es gibt über den EventArg die Option ein "e.Cancel" auf True bzw. False zu setzen, ich vermute mal blind, dass dieses Ergebnis dann ein "Validierung positiv/negativ" festlegt, probier diese Option doch mal aus.

Ein anderer Ansatz ist, den Wert der Zelle auf "0.0" zu setzen, anstatt ihn leer zu lassen, da kann ich aber nicht sagen, ob das fachlich richtig ist.

Grüße
Norman-Timo

16.01.2009 - 10:13 Uhr

Hallo jaensen,

kann auch "Data Model U" bedeuten 😉

Grüße
Norman-Timo

16.01.2009 - 10:08 Uhr

Hallo Ares,

Daher "kennt" Objekt A keine anderen Objekte des Servers und kann damit auch nicht mit anderen Teilen des Servers kommunizieren. Objekt A ist gänzlich getrennt vom Server.

Das ist definitiv falsch. Alle Objekttätigkeiten werden an den Server übermittelt, und Du hast auch richtig erkannt, dass es für den Client völlig transparent ist, wo das Objekt nun definitiv gehalten wird. Aber das Remoting Objekt läuft so, als wäre es ein Objekt auf dem Server (sinnbildlich gesprochen).

Mach doch einfach ein kleines Testkonsolenprogramm, das Dir genau die "Mächtigkeit" von Remotingobjekten demonstriert. Du kannst dann mit den verschiedenen Varianten herumspielen und lässt Dir zeigen, was geht, und wo es Grenzen gibt.
Du kannst ja ein Mini-Chatprogramm schreiben, das über Remoting klommuniziert, das ist wohl die anschaulichste Variante in Sachen Remoting. Ein Client-Konsolenprogramm und ein Server-Konsolenprogramm. Beide geben den Text des anderen mit aus.

Ich kann Dir vorab sagen, dass ein Remoting-Objekt durchaus Zugriff auf die Serverkomponenten hat, ansonsten wäre mir der Sinn von Remoting wohl überhaupt nicht einleuchtend.

Wie gesagt, das weitverbreiteste Verfahren ist wohl "Serversided Activation and Singleton". Darauf würde ich mich dann auch konzentrieren an Deiner Stelle.

Grüße
Norman-Timo

Edit: Schau doch auch mal hier, wenn Du schon ein fertiges Beispiel sehen willst:
Codeproject - InstantMessaging via Remoting

16.01.2009 - 08:30 Uhr

Hallo zerberos,

Du kannst hier das DataGridView.CellValidating Event benutzen, um den Inhalt zu überprüfen. Da das für jede Zelle es DGV ausgelöst werden kann, musst Du lediglich überprüfen um was für eine Zelle es sich handelt, und kannst dann spezifische Validierunsimplementierungen vornehmen.

Siehe auch hier:
MSDN - DataGridView.CellValidating Ereignis

Normalerweise hätte ich gesagt, schau in die Doku, was die DGV Klasse für Member hat, aber hier wird man ja erschlagen, deshalb der Tipp von mir

Grüße
Norman-Timo

16.01.2009 - 08:23 Uhr

Hallo Ares,

Du hast das Prinzip verstanden, aber noch nicht ganz vollständig erfasst. Es gibt 4 verschiedene Varianten des Remoting:

  1. Das Remoting-Objekt wird auf dem Server instanziiert und gehalten und es ist ein Singleton.
  2. Das Remoting-Objekt wird auf dem Server instanziiert und gehalten aber jede Anfrage erzeugt eine neue Instanz.
  3. Das Remoting-Objekt wird auf dem Server instanziiert aber es wird beim Client gehalten und ist ein Singleton.
  4. Das Remoting-Objekt wird auf dem Server instanziiert aber es wird beim Client gehalten und ist kein Singleton.

Die beiden letzten Varianten sind eher ungewöhnlich, aber technisch machbar.

Ein Remoting Objekt hat wie ein "normales" Objekt Zugriff in seiner Umgebung. Also auf Dein Beispiel bezogen, wenn die Windows-Form Applikation den Mechanismus des Remoting bereitstellt, dann ist es möglich, dass auch Zugriffe auf die Form selbst erfolgen können (hier aber unbedingt dann Multithreading und GUI Zugriff beachten).

Die wahrscheinlich häufigste Einsatzvariante ist die oben genannte 1), denn das würde eine zentrale Schnittstelle (für alle eine Instanz) auf Serverfunktionalität bedeuten.

Grüße
Norman-Timo

15.01.2009 - 08:38 Uhr

Hallo JuyJuka,

so wie Jelly das angedeutet hat ist das auch durchzuführen. Ich würde für dieses Szenario vorschlagen, dass der Drucker direkt an einem Seriellen Port des VorOrtRechners angeschlossen wird (und nicht über Netzwerk!).

Dann sollten die Daten direkt per ASCII Commands an den Zebra Drucker gesendet werden und das direkt über die serielle Schnittstelle, da spricht der Drucker nämlich "sofort" an, und das geht nicht über einen Spooler oder über das Netzwerk.

Alles andere sind viel zu viele Unsicherheitsfaktoren und können zu Verzögerungen führen.

Wie man den Drucker anspricht? -> Hier im Forum gab es mal Hinweise zu Zebra Druckern und der Hersteller liefert hier in aller Regel auch ausreihende Informationen.

Grüße
Norman-Timo

14.01.2009 - 13:27 Uhr

Hallo console,

ausgehend von Deinem geposteten Syntax, warum nicht mit einem normalen if?


<xsl:if test="name != ''">
</xsl:if>

Grüße
Norman-Timo

EDIT: bei XSLT gibt es keinen Operator "<>", der ist analog zu CSharp "!=", das ist nun korrigiert.

14.01.2009 - 13:18 Uhr

Hallo JuyJuka,

hat Dein "Echtzeitsystem" auch einen Namen? Ich kenne nicht sehr viele Systeme, die wirklich echtzeit sind, aber ich kenne z.B. keines, bei dem ich irgendwie einen Reportgenerator drauf bringen könnte, weil meist der Prozessor gar nicht dazu passt.

Grüße
Norman-Timo

14.01.2009 - 13:00 Uhr

Hallo zusammen,

gerade per E-Mail erhalten:
Alcohol Fueled Development

😉

Grüße
Norman-Timo

14.01.2009 - 12:54 Uhr

Hallo BerndFfm,

Alternative? TotalCommander, der ist in dieser Sache einmalig.

Grüße
Norman-Timo

14.01.2009 - 09:07 Uhr

Hallo Garek,

ein weiterer pragmatischer Ansatz ist, dass Du selbst eine XML-Datei mit Deinen Konfigurationen entwirfst und diese dann mit folgendem Verfahren ein- / und ausliest:
XML Childnodes auslesen

Dann hast Du alle Konfigurationen in einem DataSet, und in einem XML File persistiert (was Du auch händisch ändern kannst).

Grüße
Norman-Timo

14.01.2009 - 09:03 Uhr

Hallo lindan,

also ich kenne ebenfalls Edifact, muss aber sagen, dass das überhaupt nicht trivial ist sich in dieses "Format" einzuarbeiten, und ich würde behaupten, dass wenn das in dem Betrieb nicht weiter verwendet wird, dass es sich auch nicht rentiert sich neu darin einzufinden.

Aber LastGentleman kann sich das auch mal anschauen, und kann dann selbst für sich und seinen Betrieb entscheiden.

Grüße
Norman-Timo

14.01.2009 - 08:30 Uhr

Hallo Grimmbizkit,

das funktioniert so, als wenn es eine beliebige andere Datei wäre, also mittels:


System.IO.File.Move(
   System.Reflection.Assembly.GetExecutingAssembly().FullName,
   "mynewExeNameWithPath");

Wenn die Datei ausgeführt wird, wird sie in den Speicher geladen und ein Löschen der Datei verhindert. Aber ein Umbenennen ist trotzdem gestattet (Warum das so ist, müsste man Microsoft fragen).

Grüße
Norman-Timo

13.01.2009 - 14:53 Uhr

Hallo MoS87,

auch wenn es nun funktioniert:
Ein String.Replace ersetzt korrekt Zeichen, das ist keine Frage, aber wenn, dann muss man das Ergebnis auch direkt einem String zuweisen (wenn gewünscht auch demselben).

z.B.:

String myVar = "irgendein%20dateiname.txt";
myVar = myVar.Replace("%20", " ");

Ich habe den Verdacht, dass Du das in Deinem ersten Versuch nicht beachtet hast, entschuldinge bitte falls doch.

Grüße
Norman-Timo

13.01.2009 - 13:17 Uhr

Hallo Garek,

schau doch mal hier: [Tutorial] Das neue Konfigurationsmodell im .NET Framework 2.0

Das lässt sich sicherlich auch mit einer Klassenbibliothek verwenden.

Grüße
Norman-Timo

13.01.2009 - 13:11 Uhr

Hallo Stu42,

das Verzeichnis, in dem die EXE ausgeführt wird? Da würde ich es mal "." versuchen (natürlich ohne Hochkomma). Aber ob das sicher funktioniert, das weiß ich nicht.

z.B.: ".\MySubDir\MyFileToGet.txt"

Grüße
Norman-Timo

13.01.2009 - 10:25 Uhr

Hallo Golo,

hilft es auch nicht, wenn Du im VS (oder in den Projektdateien direkt) das Ausgabeverzeichnis veränderst, das kann dann auch eine relative Angabe sein, wie in Deinem Fall: "..\Build"

In den Projektdateien ist ein Ausgabeverzeichnis definitiv festgelegt, ob es auch von MSBuild ausgewertet wird weiß ich nicht, würde es aber stark vermuten.

Grüße
Norman-Timo

13.01.2009 - 10:22 Uhr

Hallo Stu42,

Was kann ich dort alles angeben?

Das sind String-Argumente und Du kannst alles angeben. Die Exe muss es lediglich auswerten (können), um sinnvolle Effekte erzielen zu können.

Im Prinzip ist es die Angabe, wenn Du im CMD-Konsolenfenster den Aufruf "myapp.exe -parameter1 -parameter2" eingeben würdest. In diesem Beispiel wäre der Inhalt der Argumente: "-parameter1 -parameter2" (also inkl. Minuszeichen!).

Grüße
Norman-Timo

13.01.2009 - 10:13 Uhr

Hallo LastGentleman,

grundsätzlich kann man zu XML sagen:

* Ich würde bei Ex- / Import nie auf Schemas verzichten, die helfen Dir bei der Datenvalidierung
* Es gibt verschiedene Möglichkeiten XML zu erzeugen und in ein verarbeitungswürdiges Format zu wandeln:

  • (wie angesprochen) XmlSerialization
  • XmlDocument (also Knotenerstellung bei Fuß)
  • OR/Mapping mit z.B. Linq oder ein anderer Mapper (eventuell hilft hier auch die XSD.EXE die im .NET SDK vorhanden ist?)
  • (wie angesprochen) DataSets
    * Ist eine Versionierung zu beachten, oder gibt es unterschiedliche Ausprägungen der Lieferscheine (z.B. Customer1 bekommt eine andere Art als Customer2?) dann muss Schema und Xml-Dokument konfigurativ hinterlegt werden können

Prinzipiell würde ich so vorgehen, als wenn es eine Datenbank wäre. Also würde ich von der BusinessLogic auf die DataLogic zugreifen, welche die Erzeugung und das Einlesen der XML-Daten vornimmt. Ob Du dann das Xml Dokument durchreichst, oder wirklich mit einem OR/Mapping arbeitest, das musst Du entscheiden (Kosten/Nutzen-Analyse). Ich persönlich würde immer ein Mapping vorziehen, da das eine weitere Abstraktion erzeugt.

Grüße
Norman-Timo

12.01.2009 - 14:52 Uhr

Hallo Uwe81,

wieso die Selbstzweifel, das sieht doch sehr gut aus, und ich wüsste nicht, wie man es eleganter machen könnte.

Eventuell kann man das in der Art Objektorientiert gestalten, dass man diese Funktionalität kapselt und einem allgemeinen Control hinzufügen kann, hat aber nix mit der konkreten Problemlösung zu tun.

Grüße
Norman-Timo