Danke für alle Antworten. Ich habe mir schon gedacht, dass Brutto und Netto einen Unterschied machen, dass dieser aber so groß ist hätte ich nicht gedacht. Es wird mir wohl nichts anderes übrig bleiben als ein Kabel zu legen, oder für mehr Power im WLAN (neue Hardware) zu sorgen.
Ich weiß nicht genau, ob ich mit der Frage hier so richtig bin, da ich aber sonst bei keinem Forum dieser Art angemeldet bin, stelle ich sie trotzdem:
Ich habe seit kurzen ein VDSL50-Anschluss. An einem PC liefert dieser auch die gewünschte Bandbreite von 35-50Mbit. Ich habe aber noch einen 2. Rechner, welcher über WLan angebunden ist. Da der Rechner etwas weiter entfernt steht, muss mit Hilfe eines Range-Extenders die Reichweite verlängert werden.
Durch den Extender habe ich volle Siganlstärke und eine Übertragungsrate von 72MBit/s (lt. Windows-Tooltip). Trotzdem erreiche ich nicht die Bandbreite von 35-50Mbit.
Mein Frage ist wieso? Mit dem WLAN-Netz sind theoretisch bis 300MBit möglich.
Der Extender kann 150MBit und ich weiß das er ca. die Hälfte der Bandbreite frisst. Aber wenn mir Windows 72MBit/s anzeigt, müsste das dann nicht reichen?
wenn es mehr um eine Navigation geht, sollte man sich als Vorbild vielleicht mal Office Outlook anschauen. Im linken Bereich gibt es dort auch eine Navigation. Wenn man das mit mehr als 2 Ebenen braucht, tut es vielleicht auch ein Tree.
Ich habe AsGoodAsItGets schon probiert und was soll ich sagen, der Name ist Programm. Es gibt einfach keine "gute" Lösung für Remoting auf dem Compact Framework. Ist halt so. Aber mit AsGoodAsItGets ist es zumindest möglich.
Danke für die Antworten.
Gruß
Friedel
PS: Ich werde Zyan auf jeden Fall im Auge behalten.
Nachdem ich jetzt noch mal etwas Zeit hatte, mir das ganze anzusehen, scheint es ja gar nicht möglich zu sein, dass Zyan-Framework auf einem Windows CE-Gerät laufen zu lassen, da z.B. wichtige DLLs wie System.Runtime.Remoting fehlen. Habe wohl Microsoft .NET Framework 3.5 Client Profile und Compact Framework 3.5 (leider) durcheinander geworfen. Dann ist dieses Framework, so gut es auch für "normale" PCs funktioniert, für mich nicht zu gebrauchen; wie so viele andere Frameworks auch.
Langsam verliere ich gewaltig die Lust an Remoting und Compact Framework. Ich kann einfach nicht glauben, dass ich der einzige bin, der für oben beschriebenes Szenario eine Lösung braucht. Wieso wurde im CF so eine Funktionalität einfach entfernt? Klar, irgendwas muss raus, aber das komplette Remoting inkl. Serialisierung der Objekte? Wer bitte hat das entschieden?
Trotzdem tolles Framework von dir Rainbird. Danke, dass du meine Fragen so ausführlich beantwortet hast.
Wenn ich mich Irre und Zyan doch auf CE lauffähig wäre, wäre das ein Fehler von mir, über den ich mich sehr freuen würde ;-).
Vielen Dank erst mal für deine Ausführliche Antwort.
Irgendwie habe ich mir das schon gedacht, dass mein
Ansatz irgendwie nicht so toll ist. In kein Framework passt
das Konzept.
Da du mir angeboten hast, mein Problem genauer zu schildern,
mache ich dies jetzt einfach mal: :-)
Ich habe eine Anwendung auf einem PC, welche per Remoting mit
einem Windows-Dienst arbeitet. Dieser Dienst wiederrum kann sich
mit beliebig vielen anderen PCs mit diesem laufendem Service
verbinden, oder sich direkt mit mehreren CE-Geräten. Es ergibt
sich so ein Baum mit beliebiger Tiefe. An jedem Endknoten des
Baumes ist ein CE-Gerät zu finden.
Die CE-Geräte zeichnen unentwegt Daten auf (Messdaten).
Ich hatte mir überlegt, eine Komponente (DeviceController) zu schreiben,
welche sowohl als Service als auch auf den CE-Geräten läuft. Mit Hilfe
von sognannten (DeviceController-)Services hätte man die
DeviceController entsprechend ihrer Aufgaben parametrieren können.
Eine der wichtigsten Aufgaben wäre das Sammeln der Daten der
angeschlossenen DeviceController gewesen (z.B. einmal am Tag
alle angefallenen Daten abholen), diese zu analysieren und
dann auf geeigneten Medien zu speichern. Auf Anfrage von wiederrum
darüber liegenden DeviceControllern rückt der entsprechende DeviceController
diese gesammelten und analysierten Daten raus.
(So ergibt sich zum Beispiel Kassel-Nord + Kassel-Süd = Kassel,
Kassel + Wolfhagen = Nordhessen, Nordhessen + Südhessen = Hessen, usw.)
Diese DeviceController-Komponente wollte ich nun per Remoting übermitteln.
Damit wäre es egal gewesen, wo ein DeviceController in der Hierarchie ist,
ich hätte diesen einfach anzeigen und parametrieren können, da ja
alle gleich sind und sich "nur" durch ihrer (aktiven) Services
unterscheiden.
Ich hoffe ich habe den Sachverhalt einigermaßen verständlich beschreiben.
Danke, dass du dir überhaupt die Zeit nimmst über mein Problem nachzudenken.
kurz und knapp:
- der als TMessageContract angegebene Typ muss das Interface IPort implementieren
- der als TImplementation angegebene Typ muss vom als TMessageContract angegebenen Typ abgeleitet sein und einen parameterlosen Default-Konstuktor besitzen (new())
Ich teste gerade etwas mit dem Zyan Framework von Rainbird rum und muss erstmal sagen, dass ich doch sehr begeistert bin. Endlich mal ein Framework in dieser Richtung, welches einem einiges abnimmt. Dafür schon mal Dank an Rainbird und Co.
Allerdings habe ich auch noch 2 Fragen:
1. Kann man mit Zyan auch komplexe Typen benutzen?
Ich würde gerne so etwas machen:
Die Eigenschaft 'SubClass' gibt eine Referenz einer simplen Klasse zurück und diese hat eine Eigenschaft Name, welcher per Default auf "1234" gesetzt ist. Weise ich der Eigenschaft jetzt "4567" zu und rufe diese erneut ab, ist der Wert immer noch "1234". Geht das per se nicht, oder muss dafür etwas spezielles beachtet werden.
2. Wie verhält es sich mit der Lebensdauer eines Remoting-Objekts und was passiert, wenn das Gerät (CE-Device) eine neue IP-Adresse zugewiesen bekommt?
Der "Server" (WinCE-Gerät) soll als Anwendung laufen, die ständig etwas macht (parametrierbar). ServiceHost ist hier nicht gleich einem Windows Service. ServiceHost benötige ich, um einen "Server" auf einem PC zu initialisieren (WCF). Diese Klasse gibt es (zumindest für mich) unverständlicher Weise nicht im CF. Remoting, WCF und wie sie alle heißen kann man für WinCE Geräte komplett vergessen. Selbst Frameworks wie AsGoodAsItGets (der Name ist Programm) sind da nicht besser.
Ich habe viele WinCE Geräte mit .Net CF 3.5. Diese Geräte sammeln unentwegt Daten (Messdaten) und speichern diese auf dem vorhandenen Flashspeicher ab. Nach einem festgelegten Zeitraum kommt eine Anfrage eines Servers (Windows Dienst auf einem PC) und holt die Daten ab (via WCF). Soweit so gut. Jetzt soll es aber auch möglich sein, dass eines dieser CE-Geräte als "Server" funkieren soll, also die Daten von bekannten Geräten sammelt. Das funktioniert allerdings nicht, da es System.ServiceModel.ServiceHost im CF nicht gibt.
Fragen:
Ist es überhaupt möglich einen Server per WCF auf einem CE-Host laufen zu lassen?
Gibt es eine Alternative?
Ist ein solches Zenario so unwahrscheinlich, oder warum geht das nicht per WCF?
vielleicht hilft die dieser Link. Hier wird beschrieben, wie man ermittelt, ob und wenn, welcher Text im aktiven Control (auch das einer anderen Anwendung) markiert ist. Dann kannst du dir den Weg übere die Zwischenablage sparen.
Ist allerdings in VB umgesetzt.
da es auf "einfachem Wege" anscheinend nicht geht, da du im I-Net nicht fündig geworden bist, gibt es evtl. eine Lösung mit PropertyDescriptions und ITypedList. Damit ist es möglich jedem beliebigem Typ Properties zu verpassen. Bspw. kann man einem Typ Auto die Eigenschaft Aussentemperatur verpassen, ohne dies im Objektmodel (weil falsch!) machen zu müssen. Man gaukelt es der Datenbindung (um nichts anderes handelt es sich bei diesem Problem mit dem PropertyGrid) einfach nur vor. Also anstatt dem PG ein Array als Datenquelle zu übergeben, nimmst du eine ITypedList (sh. MSDN).
muss man eh in ticks umrechnen ... aber ich habe nciht gedacht, das ich hier alles im deteil vorkauen muss.
extra für euch: "new TimeSpan(((long)(meinDoublewert * TimeSpan.TicksPerMillisecond)));"
edit: klammerung war falsch :-)
edit2: @Friedel: die vorgehensweise ist dennoch korrekt....
Brauchst du mir nicht vorkauen, kann ich selber. Wenn du aber eine Antwort postest, welche eine Überladung nutzt, die es nicht gibt, muss das korrigiert werden. PseudoCode OK, aber falschen Code, ich weiß nicht...
das was du da vorhast, kann man bspw. mit DataSet, DataTable und DataAdapter lösen. Auch ein TypedDataSet ist hier sicher möglich. Schau mal in der MSDN oder einfach bei Google danach.
Ansonsten ist deine Vorgehensweise natürlich auch möglich, aber wahrscheinlich nicht so einfach auf andere DBs (Firebird, CE, usw.) umzusetzen.
naja, deine neu erstellte DataTable hat keine Spalten (Columns) ber du versuchst eine Zeile (Row) hinzuzufügen, welche zwei Werte (einen für jede Spalte) beinhaltet.
Jein: Der Compiler ist in der Lage, Typparameter für generische Methoden zu erraten (sehr wichtig / komfortabel im Zusammenhang mit LINQ).
Wenn das also wichtig / komfortabel für LINQ ist, heißt das dann, dass in einer früheren Version (Framework/IDE) der Compiler nicht geraten und damit dann richtig gelegen hätte?
ich habe eine Klasse (nicht statisch), welche zwei Methoden besitzt:
public static object Copy(ISerializable original, StreamingContext context) {
DeepISerializableObjectCopyer dc = new DeepISerializableObjectCopyer(context);
return dc.MakeCopy(original);
}
public static T Copy<T>(T original, StreamingContext context) where T : ISerializable {
return (T)Copy(original, context);
//return (T)Copy((ISerializable)original, context);
}
rufe ich jetzt die generische Methode T Copy<T>(...) auf, bekomme ich eine StackOverflowException, weil im Body immer wieder die generische aufgerufen wird. Kann mir jemand erklären, warum. Die Signatur der nicht generischen Methode unterscheidet sich doch von der der generischen, oder?
Nehme ich den auskommentierten Code rein (und natürlich die andere Zeile raus), funktioniert alles wie erwartet?!
trotz des laufenden Threads wird die Dispose-Methode des Controls aufgerufen. In dieser kannst du deinen laufenden Thread mitteilen, dass dieser abbrechen/sich beenden soll (z.B. mit einer boolschen Variablen).
also für mein Verständnis ist das keine gute Idee. Eine Assembly ist eine in sich geschlossene Einheit, oder sollte eine sein. Was passiert bspw. wenn du eine von diesen Assemblies, welche auf die "Haupt-Assembly" zugreift, in einem anderen Projekt mit einer anderen "Haupt-Assembly" nutzen möchtest?
Also ich würde entweder in jede Assembly die app.config bearbeiten, oder du nutzt eine eigene Datei/eigene Dateien, welche du z.B. in C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\DeinProgramm\default.ini speicherst und in welcher "jeder" reinschreiben kann was er will (verwaltet von einer speziellen Klasse). Bin ich bisher immer sehr gut mit gefahren...
[System.ComponentModel.DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public List<DiskViewItem> Items {
get { return items; }
set { items = value; }
}
markieren, oder die DiskViewItem-Klasse serialisierbar, also für den Designer "speicherbar" machen. Das ist allerdings nicht ganz so trivial, wenn das alles im Designer bearbeitbar gemacht werden soll.