Laden...
G
GarlandGreene myCSharp.de - Member
Softwareentwickler .NET / ABAP Emmerich, NRW Dabei seit 18.08.2006 497 Beiträge
Benutzerbeschreibung

Forenbeiträge von GarlandGreene Ingesamt 497 Beiträge

22.12.2011 - 16:23 Uhr

Anwendungsdaten gehören in den ProgramData-Ordner (%programdata%), nicht in den Programme-Ordner. Sind es benutzerbezogene Daten, sollten sie im AppData-Ordner (%appdata%) landen.

16.11.2011 - 22:34 Uhr

normalerweise gehört sowas in eine DMZ. Eine Firewall vor dem Webserver lässt nur Port 50000 durch, eine Firewall hinter dem Server lässt nur die Verwaltungsports, die vom internen Netz benötigt werden, durch - und auch nur von den IP-Adressen, die darauf zugreifen müssen (Backup, Fernwartung etc.). Foxpro bedeutet vermutlich, dass der Webservice direkt auf die Datenbankdateien zugreifen muss, also muss zumindest die SMB-Verbindung zu dem Fileserver, der die Datenbank bereitstellt, zugelassen werden. Ich würde dann zumindest nur Lesezugriff vom Webserver erlauben, die Authentifizierung also über einen entsprechend schwach privilegierten Benutzer laufen lassen.

02.11.2011 - 20:08 Uhr

du müsstest ja eine Abfrage machen, die exakt die Felder abfragt, die auch in der Natural-Id stecken. Das muss innerhalb kürzester Zeit beantwortet werden, denn die Datenbank hat den Unique-Index auf diese Felder. Du könntest mal einen SQL-Profiler mitlauschen lassen (notfalls den SQL-Log von NHibernate, loggt über log4net) und schauen, was für eine Abfrage NHibernate tatsächlich erzeugt und wie lange die dauert. Kann sein, dass die Reihenfolge der Felder in der Abfrage für die Datenbank eine Rolle spielt, ich würd sie dann genau so anordnen wie im erzeugten Index. Da das ein eindeutiger Zugriff über einen Index ist, muss das eigentlich fast ohne Verzögerung zurückkommen.

Wenn die Datenbank sehr blöd ist, wird sie eventuell durch zusätzliche Felder in der Abfrage verwirrt. Daher solltest du idealerweise nur die Felder abfragen, die im Index stecken. Die meisten Datenbanken sind aber intelligent genug, sich einen passenden Index rauszusuchen. Auch das kann man mit den meisten Datenbanksystemen über einen Profiler rausbekommen.

02.11.2011 - 13:03 Uhr

NHibernate benutzt für selbsterzeugte Objekte soweit ich weiss die unsaved-value-Eigenschaft der Id um festzustellen, ob ein Objekt tatsächlich neu ist oder nur aktualisiert werden soll. Eine leere Guid würde NH mitteilen, dass das Objekt neu ist und NH würde daraufhin versuchen, das Objekt zu speichern. Bei zwei Ids in einem Objekt könnte ich mir vorstellen, dass NHibernate nur eine Id prüft - vermutlich die, die in der Datenbank als Primärschlüssel festgelegt ist. Möglicherweise ist da schon die Reihenfolge der Definition beim Mapping ausschlaggebend. Versuch doch mal, die Natural-Id zuerst zu mappen und erst als zweites die Guid.

€: wobei du grundsätzlich ein Problem mit dem Primärschlüssel hättest, wenn du den auf Guid festlegst. Zur Aktualisierung bräuchte NHibernate die Guid, zur Identifikation ebenfalls. Gerade die Guid hast du aber vermutlich nicht, wenn du das Objekt einfach selbst erzeugst und die Eigenschaften für die Natural Id befüllst.

Ich würde das mit einer Abfrage machen. Die dauert nicht lange, wenn du sie korrekt ausführst, denn die Datenbank hat ja den Unique-Index. Und NHibernate müsste dieselbe Abfrage machem, um ein bereits existierendes Objekt zu finden. Von daher macht das performanceseitig gar keinen Unterschied. Du müsstest für die Abfrage nur alle Parameter der Natural Id in der richtigen Reihenfolge angeben, dann sollte die Datenbank das eigentlich ziemlich performant lösen können.

02.11.2011 - 12:36 Uhr

Problem ist vermutlich, dass NHibernate anhand der Guid die Eindeutigkeit des Datensatzes überprüft und du auf Datenbankebene eben noch einen Unique-Index auf mehrere Spalten hinzugefügt hast - den kann NHibernate aber nicht nutzen. Vermutlich müsstest du für ein sauberes NHibernate-Mapping auf die Guid verzichten und NHibernate nur die Composite-Id geben, damit das sauber gehandhabt werden kann.

02.11.2011 - 10:54 Uhr

session.Save() geht meines Wissens nach davon aus, dass das Objekt neu ist. Mit session.SaveOrUpdate() sollte NHibernate eine Prüfung darüber, ob das Objekt bereits existiert, ausführen. Dafür muss die Id aber auch korrekt gemappt sein, speziell wenn es eine Composite-Id ist.

11.10.2011 - 12:27 Uhr

ist das nicht potentiell sehr fehleranfällig? Was, wenn der Thirdparty-Code das Event einfach nicht auslöst oder eine Ausnahme erzeugt und nicht dazu kommt, das Event auszulösen?

07.10.2011 - 10:00 Uhr

die ersten Schritte mit NH mögen zwar etwas mühsam sein, wenn man bisher nie mit einem ORM gearbeitet hat, aber nach ein paar Stunden hat sich das eigentlich erledigt. Access als Datenbank ist allerdings derart absurd, dass man da eventuell wirklich auf Probleme stösst. Wenn man keinen Datenbankserver verwenden möchte, kann man ja immer noch auf SQL Compact oder SQLite zugreifen, beide funktionieren mit NHibernate.

Etwas zu den Kritikpunkten:

a) NHibernate ist an sich nicht kompliziert, aber es erledigt halt eine ganze Latte an Aufgaben. Es ist sicher komplexer als ein einfacher Select über ADO, aber das ist auch nur ein sehr kleiner Ausschnitt dessen, was NH kann.

b) Ich habe Anwendungen von NH 1 bis NH 3 im Einsatz, die grundsätzlichen Unterschiede sind sehr gering. Es gibt ein paar Änderungen beim Upgrade von 1 auf 2, die es erforderlich machen, eigenen Code anzupassen, da man sich damals entschieden hat, ein paar Funktionen umzulagern. Da wurde aber auch hauptsächlich in andere Namespaces verschoben und die ICriteria-Erzeugung ist verändert worden. Nichts wirklich komplexes, keine neue Systematik.

c) NHibernate hat mit Visual Studio mal gar nix zu tun. Man kann, wenn man will, das XSD für die Mapping- und Konfigurationsdateien in den entsprechenden VS-Ordner kopieren, damit man Intellisense-Unterstützung bei der Bearbeitung der Mappings erhält, aber selbst das ist optional. Ich mach immer genau nur das, mehr braucht man eigentlich auch nicht.

d) ....äh?

e) HQL ist insofern sehr nett, als dass es auch komplexe Datenzugriffe von der tatsächlichen Datenbank wegabstrahiert. Ob die Datenbank jetzt ein MySQL, MS SQL, Postgres oder sonstwas anderes ist - am Code muss ich eigentlich nie was ändern, da der Datenbankprovider von NHibernate meinen HQL-Code in passendes SQL umwandelt. Dazu ist HQL durchaus mächtig, nicht jeder ORM bietet derart flexiblen Datenzugriff, ohne die ORM-Bühne verlassen zu müssen. Und in vielen Fällen ist HQL nicht mal nötig, das setzt man hauptsächlich für komplexe oder sehr performancekritische Abfragen ein. In den weitaus meisten Fällen ist das gar nicht nötig, da reicht ein bisschen Tuning beim Mapping. Seit NH 2 ist Lazy Loading auch das Standardverhalten, da ist Performance auch ohne Tuning kein großes Problem mehr.

19.09.2011 - 16:03 Uhr

Hier geht gerät man natürlich in eine länderspezifische Diskussion. Klar, wenn man - wie in den USA - jeden Furz anmelden kann, ist das sicher nicht zuträglich.

Freie Software zu fördern heißt ja nicht, kommerzielle Software abzuschaffen.

Die Piraten formulieren das erst einmal nicht so offen, aber ich bin mir ziemlich sicher, dass die Reise in eine solche Richtung gehen wird. Vielleicht nicht in den Parteienführungen selbst, aber in der Basisbewegung wünscht man sich, dass es so kommt in jedem Fall.

zum einen ist das gar nicht so länderspezifisch. Das Verkaufsverbot fürs Galaxy Tab wurde u.a. am Landgericht Düsseldorf erwirkt.

Die Förderung offener Software interessiert selbst die Piraten nur da, wo es jeden was angeht. Also hauptsächlich beim Betriebssystem oder auch beim Browser. Ob Unternehmen X eine kundenindividuelle Software betreibt, ist auch denen ziemlich egal. Die würden nur ganz gerne das Beinahe-Monopol von Microsoft am Arbeitsplatz und am privaten Rechner brechen.

Und was die "Parteibasis" angeht: da dürfte auch keiner mehr die Grünen wählen, weil deren Basis vermutlich bei der ersten Gelegenheit das Auto verbieten würde. Aber selbst nach 7 Jahren Rot-Grün fahren wir noch fröhlich mit den Spritfressern rum.

Die Forderung nach Einblick in Quellcode ist ja selbst bei MS schon vor langer Zeit angekommen. Da gewährt man zwar nicht jedem, aber schon vielen großen Kunden Einblick. Das .Net-Framework ist ebenfalls offengelegt worden. SAP lässt alle seine Kunden in seine Quellcodes (zumindest die vom ERP) reinschauen. Da gehts nicht um Hippiebewegung oder freies Raubkopieren für alle, sondern um Sicherheitsbedenken individueller Kunden und Regierungen.

19.09.2011 - 11:31 Uhr

wie teuer und innovationshemmend Patente im Zweifelsfall sein können, sieht man ja schön am Handy- und Tablet-Geschäft. Samsung darf sein Galaxy Tab nicht verkaufen, weil die äußere Form (ein flacher Bildschirm mit einem Knopf) einem Ipad zu ähnlich ist - und da reden wir von einem sehr schlichten Design mit nicht allzu vielen Alleinstellungsmerkmalen. Google kauft mal eben Motorola Mobile, um ein paar Patente in der Hand zu haben - für rund 12 Mrd US-Dollar. Unternehmen wie Microsoft werden verklagt, weil sie eine sehr generös umschriebene Prozedur zum Speichern von Daten, auf Datenbanken basierende Onlineturniere oder andere Entwurfsmuster nutzen, die man als Entwickler am ehesten als "der einzig sinnvolle Weg, sowas zu machen" beschreiben würde. Patente haben einen Sinn und Zweck, aber sie werden schon seit vielen Jahren instrumentalisiert, um Konkurrenten aus dem Geschäftsfeld zu drängen oder am Verkauf zu hindern. Zumindest die ganzen Trivialpatente gehören abgeschafft, sonst machen bald nur noch die ganz großen Läden Software, denn jeder andere muss Angst haben, von Patenttrollen verklagt zu werden, gegen die er sich nicht wehren kann. Und eine Prüfung, ob man gegen Patente verstößt, ist eh nicht möglich. Zum einen ist das Auslegungssache, zum anderen sorgt die schiere Anzahl an Patenten dafür, dass kein Softwareunternehmen der Welt sich da jemals durchgraben könnte.

Freie Software zu fördern heißt ja nicht, kommerzielle Software abzuschaffen. Es gibt ja immer noch reichlich Geschäftsfelder, in denen kommerzielle Software ohne Konkurrenz ist. Und es gibt genauso viele kommerzielle Produkte, die deshalb erfolgreich sind, weil sie ganz einfach innovativer und besser sind als die quelloffene Konkurrenz. Vom Herstellersupport, der in Unternehmen oft Grundvoraussetzung ist, mal ganz abgesehen.

30.08.2011 - 13:10 Uhr

du könntest die XML-Dateien deserialisieren (entweder über einen eigenen Deserialisierer oder den, den das Framework mitbringt) und dann über ein Tool wie AutoMapper in deine Businessobjekte überführen.

22.08.2011 - 14:57 Uhr

äh, Anchor unterstützt doch eigentlich gar kein "Disabled" (zumindest laut selfhtml nicht). Sicher, dass der Link nicht einfach nur ausgegraut ist, weil der Browser das Ziel schon kennt?

11.08.2011 - 19:48 Uhr

du bringst da was durcheinander. Microsoft bzw. Windows manipuliert Dateien überhaupt nicht. Der Sandforce-Controller optimiert Speichervorgänge, für das Betriebssystem ist das aber absolut transparent - selbst Windows bekommt davon nichts mit. Wär dem nicht so, würde nichtmal ein DOS auf einer SSD laufen, geschweige denn ein Windows mit hunderttausenden Dateizugriffen beim Systemstart, von denen nur ein einzelner fehlschlagen muss, damit das System nicht läuft.

das NET-Framework ist ziemlich hardwareunabhängig und nutzt auf unterster Ebene hauptsächlich Windows-Systemfunktionen, auch für den Dateizugriff. Ich halte es einfach für sehr unwahrscheinlich, dass es an einem Stück Hardware liegen soll, wo doch potentiell viele Unterschiede zwischen den Systemen vorliegen können. Es könnte auch ein Caching-Problem auf Dateiebene sein, aber selbst das erledigt das Betriebssystem für einen.

11.08.2011 - 19:09 Uhr

ich bin mir ziemlich sicher, dass das nicht stimmt. Ob eine SSD oder eine konventionelle Festplatte am SATA-Anschluss hängt, ist dem System erstmal egal. Und was der Sandforce-Controller mit den Daten macht, bevor er sie speichert, spielt auch keine Rolle - würden die Daten verfälscht gelesen werden, wären SSDs generell unbrauchbar.

Eventuell ist auf deinem System zuhause der Webserver anders konfiguriert, so daß das System sich etwas anders verhält.

27.05.2011 - 10:13 Uhr

die Fehlermeldung ist die Standardfehlermeldung von ASP.Net. Damit ein Angreifer keine Informationen aus einer nicht abgefangenen Ausnahme beziehen kann, zeigt ASP.Net bei Remotezugriff nur diese allgemeine "Irgendwas läuft nicht, aber ich sag dir nicht, was"-Seite an. Was genau da jetzt nicht funktioniert, kann man damit nicht diagnostizieren. Es gibt in der web.config ein Segment, in dem man die Anzeige des tatsächlich aufgetretenen Fehlers aktivieren kann, dann kommt anstelle der allgemeinen Meldung eben der tatsächlich aufgetretene Fehler. Wie das geht, steht bereits in der generischen Fehlerseite:

<!-- Web.Config Configuration File -->

<configuration>
    <system.web>
        <customErrors mode="Off"/>
    </system.web>
</configuration>

einfach in der web.config den oben stehenden <customErrors>-Knoten einfügen, dann sollte die Fehlermeldung etwas mehr Aufschluss auf den Fehler geben. Das sollte dann aber so schnell wie möglich wieder geändert werden, weil es ein Sicherheitsproblem darstellt.

02.05.2011 - 11:26 Uhr

ein "in"-Schlüsselwort kennt C# nicht. Aber mit den erwähnten Lambda-Ausdrücken könnte man sowas machen. So ganz ohne Syntax-Check:


int[] array = new int[] { 1,6,8,15 };
int myVar = 6;
if (array.Contains(myVar))
{
}
else
{
}

09.04.2011 - 10:33 Uhr

du kannst doch einfach per Code im Controller eine Liste mit SelectListItem-Instanzen erzeugen.

12.02.2011 - 22:49 Uhr

wenn du eine Liste von Objekten serialisierst (im Prinzip also eine List<Type>), kannst du die auch wieder deserialisieren. Eine Collection, die serializable sein soll, muss ICollection oder IEnumerable implementieren - List<> z. B. funktioniert. Du hättest also eine List<Type>, die du in einen XML-Stream serialisierst. Und beim nächsten Programmstart deserialisierst du den Kram wieder zurück in eine List<Type> und hast eine Liste von Objekten, mit denen du arbeiten kannst.

19.01.2011 - 20:51 Uhr

liegt vermutlich am Spooler. Du übergibst den Ausdruck ja nicht an den Drucker, sondern an den Spooler-Dienst von Windows. Der bestätigt den Empfang und übernimmt alles weitere. Man kann, wenn ich mich nicht irre, den Spooler so einstellen, daß Drucke nicht über den Spooler in eine Warteschlange gestellt, sondern sofort an den Drucker geschickt werden. Eventuell bekommst du dann genauer mit, wann der Drucker fertig ist. Aber auch da ist es möglich, daß der Drucker eine Datei in seinen lokalen Speicher übernimmt, dem Spoolersystem das "Fertig"-Signal übermittelt und tatsächlich noch druckt.

18.08.2010 - 22:08 Uhr

alternativ hilft es eventuell, im Internet Explorer die Netzwerkfreigabe zur Intranetzone hinzufügen. Zumindest diverse Ausführsperren wie auf Netzlaufwerken liegende .chm-Dateien werden dadurch anscheinend aufgehoben.

15.07.2010 - 20:58 Uhr

SAP ERP - und größtenteils zufrieden.

01.07.2010 - 17:24 Uhr

Die View soll die Daten aus dem Model darstellen. Wie sollte sie das denn machen, ohne eine Model-Instanz direkt anzusprechen?

Das ViewModel ist zu genau diesem Zweck da - Daten für eine View aufbereiten. Das ViewModel enthält dann alles, was die View braucht. Das soll verhindern, daß man in einer View auf einmal auf die Idee kommt, wieder Daten von anderen Quellen abzurufen. Ginge ja prinzipiell auch, ich kann da ja beliebigen Code ausführen. Der Controller bereitet die Daten in Form des ViewModels auf und übergibt sie an die View. Damit sind Datenaufbereitung und Präsentation voneinander getrennt.

10.05.2010 - 13:44 Uhr

so ganz ohne Code wird das wohl nicht funktionieren. Ihr müsst euch irgendeine Lizensierungsvariante oder gar Aktivierungsvariante ausdenken. Viele kommerzielle Anwendungen kleinerer Softwareunternehmen gehen aber immer noch den Weg, einfach nur eine Seriennummer nach der Installation zu verlangen. Ohne eine Aktivierungsprozedur könnte man diese Seriennummer auch X mal auf verschiedenen Rechnern benutzen. Abhilfe schafft da nur eine Bündelung an die Hardware, das erfordert dann aber durchaus einiges an Entwicklung und Infrastruktur.

18.03.2010 - 08:22 Uhr

das ganze hat weniger mit WCF und vielmehr mit XML zu tun. XML kann solche Objektbäume ohne Umwege nicht darstellen.

Ich selbst mache das so ähnlich wie du. Ich übertrage die zu übertragenden Objekte in neue Datenklassen, die ich entsprechend serialisierbar gestalte.

16.02.2010 - 12:35 Uhr

solche dynamischen Geschichten mit abgeleiteten Klassen in Aufruf- oder Rückgabeparametern sind zumindest mit ASP.Net-Webservices meines Wissens nach nicht ohne weiteres möglich. Würde auch nicht dem WS-Gedanken eines fest definierten Vertrages entsprechen, in dem alle Elemente von Anfrage und Antwort vorher feststehen.

Edit: ich seh grad, die MSDN macht das im Beispiel genauso.

03.02.2010 - 11:27 Uhr

ich würd erstmal die Implementierung der Businesslogik festlegen. Da bietet sich WCF an. Welcher Client auf den Service dann zugreift, ist dann abhängig von den Anforderungen. Webseite, Windows Form, WPF-Form oder auch ein mobiles Endgerät, spielt dann kaum noch eine Rolle ("kaum", weil WCF halt doch nicht überall gleichermaßen unterstützt wird). Ich persönlich bevorzuge Webseiten als visuelles Frontend, da ich mich nicht um Installation, Distribution und Aktualisierung kümmern muss. Aber in vielen Fällen bietet eine Webseite nicht die Möglichkeiten, die man für einen speziellen Anforderungsfall benötigt (Anbindung Barcode-Scanner per COM-Port z. B.), dann muss halt eine Win32-Anwendung herhalten. Aber das sind dann alles nur noch Frontends, die man auch je nach Einsatzgebiet klein halten kann.

07.01.2010 - 12:25 Uhr

Logging per log4net und dann einen Logger als Email-Logger konfigurieren?

04.01.2010 - 21:23 Uhr

Sicher doch einfach alle Verzeichnisse. Die SVN-Dateien wirst du ohne VisualSVN nicht ohne weiteres benutzen können. Einfach alles sichern, nach einem Crash VisualSVN wieder installieren und das Repo zurücksichern. Wenn du parallel dazu noch eine Kopie der aktuellen Quellcodes haben willst, kannst du dir die auch in ein Backup-Verzeichnis auschecken und dieses Backup-Verzeichnis regelmäßig aktualisieren.

30.11.2009 - 14:19 Uhr

Casten kannst du das nicht. Aber wenn die zwei Services identisch sind, warum dann überhaupt zwei Referenzen?

25.11.2009 - 08:07 Uhr

wahrscheinlich ist der Wizard vom Visual Studio zu blöd dazu. Aber du kannst den Ws-Proxy auch über die wsdl.exe erzeugen. Du öffnest einen Visual Studio command prompt und rufst darin die wsdl.exe auf. Die bietet dir u.a. auch die Parameter Username und Password. Ich selbst hab die Parameter in eine Parameterdatei geschrieben, die ich dann nur noch über den "/parameter"-Parameter angeben muss. Dann muss ich beim Aktualisieren der Webreferenzen nicht immer erst alle Parameter raussuchen.

19.11.2009 - 14:27 Uhr

Öh, einfach ein WCF-Webservice?

18.11.2009 - 15:40 Uhr

bei ASP.Net gibt es zwar Databindings, aber die sind nur innerhalb eines Requests gültig. Grund hierfür ist, daß das gebundene Objekt selbst nach dem Request nicht mehr existiert. ASP.Net persistiert gebundene Daten normalerweise im Viewstate und holt die beim Postback dann daraus zurück, das sind dann aber eigene Objekte, die nichts mehr mit den ursprünglich mal gebundenen Datenquellen zu tun haben.

Das ganze ist sowieso Augenwischerei. HTTP ist ein statusloses Protokoll. Jeder Request muss technisch als neuer Request gesehen werden, Konstrukte wie Postbacks täuschen nur (teilweise) darüber hinweg.

18.11.2009 - 10:18 Uhr

Die Einstellungen im InternetExplorer sind nicht ausfallsicher genug, denn durch Versionsumstellungen (6->7,7->8) und Updates gingen schonmal Einstellungen (Intranet Sites, Sicherheitsstufe, etc.) verloren.

stell den Kram doch einfach per Gruppenrichtlinie korrekt ein. Dafür gibts entsprechende Templates, die von IE 6 bis IE8 funktionieren.

12.11.2009 - 17:42 Uhr

Session per Call ist eigentlich die Standardmethode. Nur die SessionFactory sollte aus Performancegründen nicht für jeden Call neu erzeugt werden. Ich selbst lege die SessionFactory im OperationContext des Dienstes ab. Die Session-Erzeugung selbst ist nicht sonderlich aufwändig und erzeugt keine Performanceprobleme.

06.11.2009 - 11:40 Uhr

du solltest eine Verbindung auf Clientseite immer schliessen. Andernfalls wird die Verbindung erst nach dem Idletimeout vom Server geschlossen.

17.10.2009 - 11:35 Uhr

die besten Chancen hat man, wenn man sich an Anforderungen anpassen kann. Das kann eine Branche sein, ein Kunde oder auch eine komplett andere Entwicklungsumgebung. Klar braucht man überall Einarbeitungszeit, aber als .Net-Entwickler ist ein Umstieg nach Java kein Problem, umgekehrt ebenfalls nicht. Auch C/C++ sind keine Zauberei. Man kann sich zwar nicht ständig bei allen wichtigen Entwicklungssystemen auf dem Laufenden halten, sollte sich aber auch nicht zu sehr auf eine Sprache oder eine Branche festlegen. Eine gewisse Flexibilität ist für Arbeitnehmer und Arbeitgeber von Vorteil.

Entwickler in OpenSource-Projekten wie dem Linux-Kernel sind oft in Unternehmen angestellt, die diese Projekte nutzen. Die Entwickler sorgen dann dafür, daß gerade die Interessen des Unternehmens, ansonsten aber auch das Projekt an sich, weitergetrieben werden. Teilweise entwickeln Unternehmen auch Open Source-Software und bieten dazu dann Consulting, Weiterentwicklung/Anpassung sowie natürlich den Support als kostenpflichtige Leistungen an.

15.10.2009 - 13:39 Uhr

http://community.sharpdevelop.net/forums/t/8664.aspx

du hast wahrscheinlich als Zielframework nicht das CompactFramework ausgewählt, oder?

14.10.2009 - 14:14 Uhr

vor allem muss die Anwendung fürs Compact Framework kompiliert worden sein und das Compact Framework muss auf dem Gerät installiert sein. Normales Framework und Compact Framework sind nicht kompatibel und auch nicht featureidentisch.

02.10.2009 - 11:32 Uhr

du meinst eine Methode, die du in einer Klasse in der Webservice-Anwendung erstellt hast, auf der Konsumentenseite (WS-Client) benutzen? Geht nicht. Es werden nur Daten übertragen, keine Programminhalte. Wär ja noch schöner, wenn ein Webdienst Programmcode in eine Anwendung weiterreichen könnte. Abgesehen sind Webservices dazu da, plattformunabhängig Daten zwischen Anwendungen austauschen zu können. Das wäre nicht möglich, wenn man da tatsächlich echte Objektinstanzen vom Webservice empfangen könnte.

01.10.2009 - 11:17 Uhr

du solltest die Klasse schon sauber mit Attributen und Attributwerten ausstatten:


[DataContract(Name = "XYZ", Namespace = "Blubb.ABC")]
public class XYZ
{

        private string _message = "";
        [DataMember(Name = "Message")]
        public  string Message
        {
            get
            {
                return _message;
            }
            set
            {
                _message = value;
            }
        }
}

so stellst du auch sicher, daß sich der Membername für WCF-Clients nicht ändert, wenn du die Eigenschaft "Message" irgendwann mal umbenennst.

15.09.2009 - 09:34 Uhr

das Ding wird einfach langsamer als ein "großer" MSSQL, wenn viele Abfragen gleichzeitig getätigt werden. Man kann die Performance also nicht mit der eines voll lizensierten MSSQL vergleichen um Rückschlüsse auf die Skalierung ziehen zu können. Das ist vermutlich auch einfach ein Punkt, den MS hinzugefügt hat, um sich präventiv vor eventuellen Behauptungen zu schlechter Performance ihrer SQL-Server zu schützen.

03.09.2009 - 15:58 Uhr

ist doch logisch. Das eine ist der Strukturtyp Info, das andere der Strukturtyp Data. Die haben halt zufällig dieselben Inhalte, aber es sind trotzdem unterschiedliche Typen!

Warum nimmst du im C#-Teil nicht einfach den richtigen Typen, "DATA"? Der ist doch, wenn du die Methode aus VB ansprechen kannst (die VB-Assembly also referenzierst), ebenfalls sichtbar.

02.09.2009 - 12:50 Uhr

Danke für die Antwort. In die Richtung habe ich auch schon gedacht aber irgendwie habbert es da an der Umsetzung. 👶
Es gibt ja die Methoden Load und Get nur die verlangen die Primär-Id und will ich ja rausbekommen da das Feld Auto-Increment ist.

Hä? Die Id wird vom DB-System vergeben, ok. Je nach DB-System kann man auf unterschiedliche Art und Weise an die Id kommen, aber das überlässt man NHibernate. Nach dem Speichern ist die korrekte Id in der Id-Property des gespeicherten Objekts, da muss man nicht selbst rumspielen.

02.09.2009 - 11:09 Uhr

ist doch klar, du erzeugst die Objekte ja auch neu. Wenn du eine Referenz auf ein vorhandenes Objekt setzen willst, musst du das Objekt mit NHibernate laden, die Referenz setzen und dann speichern.

02.09.2009 - 10:46 Uhr

du musst das Event ja irgendwo abonnieren. Und in der Methode, in der du das Event bearbeitest, machst du auch den Invoke.

das ganze sieht dann normalerweise so aus:


private void Start_Event_1_Handler()
{
      if (InvokeRequired)
      {
            // Invoke, da wir nicht im UI-Thread sind
            Invoke(new Start_Event_1_Delegate(Start_Event_1_Handler));
      }
      else
      {
            // Combobox befüllen, wir sind im UI-Thread
      }
}

01.09.2009 - 11:20 Uhr

sicher, daß das ein Berechtigungsproblem seitens Windows ist? Funktionierts denn als Admin auf demselben Rechner? Falls ja: kann es sein, daß da eine Konfigurationsdatei vom Benutzer nicht gelesen werden kann?

27.08.2009 - 20:40 Uhr

das Problem ist wahrscheinlich dasselbe - nämlich, wenn die Installation von einem Laufwerk ausgeführt wird, das wiederum an einem unbekannten Controller hängt. Den ersten Teil bewältigt das Setup noch übers Bios, aber sobald der Windows-Kernel geladen wird, benötigt Windows eigene Treiber für alle Controller, von denen gelesen oder auf die geschrieben werden soll. Das passiert bei optischen Laufwerken nur äußerst selten, da die meist am - fast immer automatisch erkannten - Onboard-Controller hängen.

27.08.2009 - 19:57 Uhr

...in dem Boot Menü fragt der mich nach Treibern, findet aber keine

dann liefert Windows 7 RC keine Treiber für den Festplattencontroller, an dem deine Festplatten hängen, mit. Die musst du dann irgendwo auftreiben und beispielsweise auf einem USB-Stick bereit halten.

25.08.2009 - 08:33 Uhr

und ein Thread.Sleep(1) ist nicht exakt genug, um damit Sekunden zu zählen. Da reicht eine Abweichung von einer halben Millisekunde aus, um bei jeder gezählten Sekunde schon um 0,5 Sekunden abzudriften. Ich würde die aktuelle Zeit auch nicht "zählen", sondern von der DateTime-Klasse beziehen. Also einfach beim Start der Stoppuhr die Startzeit merken und jeweils die Timespan zwischen Startzeit und aktueller Zeit berechnen. Einfacher, exakter.