Laden...

Forenbeiträge von sl3dg3hamm3r Ingesamt 119 Beiträge

02.07.2011 - 20:00 Uhr

Hallo

Ich habe die Prüfung vor ca. einem Monat abgelegt und bestanden. Hier noch kurz meine Erfahrungen dazu:*Ich habe die Prüfung mit Second Shot gebucht. Hat sich ausgezahlt, beim ersten mal bin ich durchgeflogen. Ich würde das vor allem Leuten empfehlen die noch nie eine MS-Prüfung abgelegt haben: Microsoft Press Buch durchackern, dann ab an die Prüfung und sehen wie's läuft. *Ich habe immer parallel zum Buch eine Zusammenfassung geschrieben. Das hilft meiner Meinung nach sehr beim Lernen und Repetieren, vor allem bei neuen Themen. Achtung: Das ist zeitintensiv, also einen realistischen Zeitrahmen einrechnen. *Es kommen leider z.T. Fragen wo es ziemlich tief in die Materie reingeht, bzw. wo Spezialwissen gefragt ist. Da hatte ich manchmal das Gefühl dass dies gar nie im Buch erwähnt wurde. Wenn man nicht damit regelmässig arbeitet, sind diese Fragen schwierig zu meistern. Abhilfe könnten da die diversen Brain-Dumps bieten. *Umbedingt auch die Fragen auf der beigelegten CD im Buch machen. Da hat es noch viele mehr nebst den Abgedruckten im Buch. *Zu MS Ajax Library sind bei beiden Tests kaum Fragen aufgetaucht. Falls da nicht wirklich Interesse besteht, würde ich nicht zu viel Zeit investieren. In Zeiten von JQuery & Co. finde ich dieses Framework so oder so eher hinfällig. Aber dies ist bloss meine Meinung. *Dran bleiben und durchziehen. Klingt banal, aber bei diesen dicken Schinken von Büchern bestehlt halt schon manchmal die Gefahr, dass man mal eine Pause einlegen will, dann wird die Pause immer länger, dann hat man alles neue wieder vergessen, und zuletzt macht man gar nix mehr. 😃

Happy learning!

09.04.2011 - 10:45 Uhr

Hallo miteinander

Ich bin nun seit längerer Zeit an der Vorbereitung für die 70-515 - Zertifizierung (Web Applications Development with Microsoft .NET Framework 4) und wollte mal in die Runde werfen, ob die ev. jemand von Euch Forum-Teilnehmern schon gemacht hat? Als Vorbemerkung muss ich sagen dass ich im allgemeinen noch keine Erfahrungen mit MS - Tests habe, es ist mein erster. Wie ist das, wenn ich*alle Fragen im Praxistest verstehe und beantworten kann *sämtliches Material des Zertifizierungsbuches durchgearbeitet habe (mal ausgenommen von den Case Szenarien, das wäre sonst endlos)

habe ich dann reelle Chancen, die Prüfung auch zu bestehen? Was mich ein bisschen verunsichert hat dass da und dort Fragen auf der CD aufgetaucht sind, bei denen ich das Gefühl hatte, diese wurden gar nicht angesprochen im Buch. Sind die Fragen an der Prüfung ähnlich schwer wie im Praxistest? Was mir weiter aufgefallen ist: Zu der MS AJAX Library hat es keine einzige Frage im Praxistest, da wurden nur jQuery und ein bisschen die AJAX-Controls abgefragt (dieses Kapitel ist, gemessen an der Anzahl Seiten, eines der am stärksten Gewichteten).

Naja, ich glaub ich werd wohl einfach mal an die Prüfung gehen müssen und schauen wie's läuft. Ich hoffe, dass die Schwachstellen (bei Nichtbestehen) dann klar ersichtlich sind und ich diese gut nachbessern kann...

Grüsse
sl3dg3

01.12.2010 - 12:17 Uhr

Hallo

Hmm das stimmt! Da hätt ich auch drauf kommen können ... 😕

Danke & Gruss
sl3dg3

01.12.2010 - 11:56 Uhr

Hallo!

Ich habe eine Webmethode, welche mit einem Query-Objekt gefüttert wird, um eine zu lange (optionale) Parameterliste zu vermeiden:

[WebMethod()]
public List<Car> GetCars(CarQuery carQuery)
{
	// Anhand von Filtern im Query-Obj Autos lesen und retournieren
	return cars;
}

// Und hier die inner Query-Klasse:
public class CarQuery
{
	public string Brand;
	public string Color;
	public string Type;
	//etc.
}

Meine Frage: Wie stelle ich die Query-Klasse dem Client am einfachsten zur Verfügung? So etwas wie 'WebClass' gibt es ja nicht. Ich habe mir mit einer zusätzlichen Web-Methode beholfen, die nichts anderes macht als das Query-Objekt zu instanziieren und retournieren:

[WebMethod()]
public CarQuery GetCarQuery()
{
	return new CarQuery();
}

Der Client ruft z.Z. diese Methode auf, befüllt das Query-Objekt und ruft anschliessend die eigentliche GetCars()-Methode auf.
Geht das nicht ohne diese Hilfsmethode?

Grüsse
sl3dg3

25.11.2010 - 12:19 Uhr

Nachtrag: In meinem Fall muss ich dem Parser noch die HTML-Entitäten bekanntgeben, da ansonsten folgende Exception auftreten kann:

Reference to undeclared entity 'nbsp'

Zudem packe ich alles in einen Root-Node - es darf auf der obersten Ebene nicht mehr als ein Node auftreten. Meine Funktion sieht jetzt wie folgt aus (sorry, VB):

     ''' <summary>
    ''' Funktion versucht, den Input-String in ein XML-Dokument zu laden. Falls eine Exception entsteht, wird davon ausgegangen, dass Input nicht wohlgeformt ist.
    ''' </summary>
    ''' <param name="s">Der zu validierende String (HTML, XML ...)</param>
    ''' <returns>True wenn der Parse-Vorgang erfolgreich war, andernfalls false</returns>
    Public Shared Function ValidateHTMLtree(ByVal s As String) As Boolean
        Dim xDoc As New System.Xml.XmlDocument()
        Dim entityDef As String = "<!DOCTYPE documentElement[" &
                                    "<!ENTITY nbsp    "" "">" &
                                    "<!ENTITY iexcl   ""¡"">" &
                            "]>"
                            ' Unvollständig, s. z.Bsp. http://www.w3.org/TR/html4/sgml/entities.html

        s = entityDef & "<item>" & s & "</item>"    ' Füge ein Root-Element an, da ansonsten eine Exception entsteht, wenn mehrere Root-Elemente vorhanden sind

        Try
            xDoc.LoadXml(s)
        Catch ex As Exception
            Return False
        End Try
        Return True
    End Function

Die Entity-Liste enthält nur zwei Einträge, und leider werden die Zeichen im Forum nicht richtig encodiert. Eine umfangreiche Liste kann z.Bsp. hier gefunden werden.

Grüsse
sl3dg3

25.11.2010 - 09:53 Uhr

Hallo Wax

Genau, das sieht schon gut aus - hatte mit dem XMLReader rumgespielt und kam damit auf keinen grünen Zweig. Das hilft, danke.

Grüsse
sl3dg3

25.11.2010 - 09:24 Uhr

Hallo

Ich suche nach einer einfachen Möglichkeit, HTML (keine komplette Dokumente, also ohne head/body etc. sondern nur Teile davon) auf Wohlgeformtheit zu überprüfen. Also einzig und allein ob geöffnete Tags auch wieder richtig geschlossen werden. Hintergrund dabei ist ein Editor (CKEditor), welcher im Prinzip nebst XSS-Attacken auch die Gefahr bieten würde, invalide Formatierungen zu ermöglichen.

Ich habe mir zuerst gedacht ich könnte da ev. einen XML-Reader benutzen, aber diese Möglichkeit fällt schon mal weg, da hier ein Root-Node erwartet wird. Dies muss ja nicht der Fall sein, es kann auch nur Text sein, ohne Tags.

Gibt es ev. eine unkomplizierte Lösung, oder müsste man da bereits auf Dritthersteller-Bibliotheken zurückgreifen?

Grüsse
sl3dg3

10.11.2010 - 09:45 Uhr

uff, du hast Recht, ich habe die Keys schlichtweg falsch angelegt! Hier nochmals ein Screen wie es richtig wäre (LogResourceBinds -> fehlerhafte Bindingversuche protokollieren; ForceLog -> alle Bindings protokollieren)

Besten Dank.
sl3dg3

09.11.2010 - 10:22 Uhr

Hallo!

Ich bekomme FusionLogVW.exe partout nicht zum laufen... ich habe gemäss Anleitung von MSDN folgende Registries unter HKEY_LOCAL_MACHINE (s. Screenshot):*Fusion/EnableLog *Fusion/LogResourceBinds

Wenn ich den Logger starte, dann ist unter Settings "Log Disabled" markiert, und nichts anwählbar. Windows-Neustart hilft auch nicht. Bei einer "Assembly not found" Exception steht nach wie vor:

WRN: Assembly binding logging is turned OFF.

Was mache ich falsch, bzw. wie bringe ich den Logger zum Arbeiten?

Grüsse
sl3dg3

29.10.2010 - 17:03 Uhr

diese Verwendung von @ sieht man in der Praxis praktisch nie..

Ok, werd's mir merken.

@enum.GetType().Name

Genau! Danke und schöns WE!

29.10.2010 - 16:21 Uhr

Hallo!

Gegeben folgendes Snippet:

public string FormatEnum(System.Enum @enum)
{
   string s;
   s = @enum.ToString();  // Name des übergebenen Enum-Codes
   // Jetzt noch Name der Enumeration hinzufügen, wie?
   return s;
}

Wie bekomme ich den Namen der Enum selbst heraus? Ist das so überhaupt möglich mit diesem Übergabeparameter? (Ich übergebe dort nur einen Code, z.Bsp. FormatEnum(Color.Red)

Danke für Hinweise!
sl3dg3

25.10.2010 - 17:29 Uhr

Hallo zero_x

Naja, im IL-Code rumzufummeln ist für mich im Moment kein praktikabler Weg. Aber velleicht lässt sich ja mit Reflection was auslesen, muss da mal etwas reinschauen...

Grüsse
sl3dg3

25.10.2010 - 15:08 Uhr

Danke für deine Antwort! Ich arbeite schon mit Rollen, war jetzt ein bisschen ein doofes Beispiel.
Schade geht das nicht. Ist imho auch deshalb blöd weil wenn ich mal die erlaubten Rollen bei der deklarativen CAS-Anweisung ändere, muss ich überall im Code schauen, wo ich das ev. vor dem Aufruf mit IsInRole() überprüfe und dementsprechend synchronisieren. Das ist doch fehleranfällig bezüglich der Wartbarkeit...

Grüsse
sl3dg3

25.10.2010 - 11:08 Uhr

Hallo!

Gegeben habe ich hier folgendes einfaches Beispiel:

  [System.Security.Permissions.PrincipalPermission(System.Security.Permissions.SecurityAction.Demand, Name:="user")]
private void MySecuredFunc()
{
	//...
}

Wie kann ich die Funktion überprüfen, ob ich überhaupt berechtigt bin, diese aufzurufen? Ich möchte keine Exception fangen, sondern viel mehr schon im Voraus einen Button aktiv oder eben inaktiv schalten, je nach Benutzer.
Ebenfalls möchte ich vermeiden, den Benutzer à la if (MyPrincipal.Name == "user") zu testen, dies würde ja Redundanzen im Code einführen. Gibt es eine direkte Möglichkeit, die Methode zu testen?

Grüsse
sl3dg3

25.10.2010 - 10:49 Uhr

Danke für den Hinweis.
Habe bemerkt dass HttpContext.Current.User eigentlich schon gesetzt ist, muss ihn nicht extra setzen. Aber die Rolle war noch nicht richtig vorhanden.... 😕

21.10.2010 - 09:48 Uhr

Hallo

Im Zuge der 70-536 - Zertifizierung sind ja Authentifizierung und Rollen von Benutzern ein wichtiges Thema. Auf Ebene einer Web-Anwendung verstehe ich es allerdings noch nicht ganz. Gerne möchte ich z.Bsp. eine Methode in meinem Domänen-Modell schützen, sodass nur Administratoren diese Benutzen können:

<System.Security.Permissions.PrincipalPermission(System.Security.Permissions.SecurityAction.Demand, Authenticated:=True, Role:="Admin")>
Private Sub _MySecuredFunction()

End Sub

Meine Web-App benutzt IIdentity und IPrincipal für angemeldete Benutzer. Mir ist nun aber nicht klar, wie ich dem Thread beibringen kann, dass er gegen diesen Benutzer prüfen soll, und nicht etwa den angemeldeten Windows-Benutzer, auf welchem die Web-App läuft?

Grüsse
sl3dg3

20.08.2009 - 11:27 Uhr

Hmmm ok!
Hatte bereits gesucht nach 'Claims-Based Identity', aber die Resourcen, auf die ich bisher gestossen bin, waren für mich bis jetzt eher verwirrend als hilfreich, bzw. ich konnte noch keine Parallelen zu meiner Aufgabe herauslesen. Scheint mir noch ein bisschen abstrakt das ganze...

Digital Identity for .NET Applications: A Technology Overview

Auch in Sachen Code-Samples hab ich bis jetzt nichts gefunden. Geht das ganze einher mit Windows Identity Foundation? Dies scheint aber brandneu.

Wohlverstanden, es geht mir nicht darum, von Grund auf ein neues Authentifizierungssystem zu bauen. Die DB mit klassischem User/PW - Authentifizierung besteht bereits. Ich brauche einzig und alleine einen Session-Pool, wo nach erfolgreicher Authentifizierung eine Session verwaltet werden kann.

19.08.2009 - 16:27 Uhr

Was mir noch alternativ eingefallen ist: könnte ich die Session von ASP.NET für meine Zwecke verwenden? Wäre es möglich, mit ASP.NET manuell (also ohne Cookies, die eine Session identifizieren) einen Session-Pool zu starten und zu verwalten? Kenne mich mit ASP.NET nicht aus und hab keine Ahnung ob so was gehen würde...

18.08.2009 - 15:50 Uhr

Jep, und hier komm ich auch mal wieder auf folgenden Punkt: Es ist ja schön dass ein Framework viele mühselige Dinge verstecken möchte und quasi unsichtbar plus vollautomatisch ausführt. Aber je nach Anforderung (wie zum Beispiel ein nicht - .NET Client) muss man dann eben doch ein bisschen das grosse Bild haben, sonst versteht man die Zusammenhänge einfach nicht 😦 ... das ist dann halt der Nachteil grosser Frameworks, es braucht lange bis man ein bisschen dahinter sieht.

Je nach Konfiguration (und Binding) ist es ja schon erstaunlich was da so neben dem eigentlichen Request an Handshakes und sonstigen Vereinbarungen über das Kabel geht, je nach Binding und Konfigurationen... aber wie soll es auch anders gehen.

Die Einarbeitungszeit als Anfänger ist schon ganz gewaltig.

Grüsse
sl3dg3

18.08.2009 - 14:47 Uhr

Hallo dN!3L

Herzlichen Dank für den Link, der ist auf alle Fälle hilfreich!

Und was die Verbindungen betrifft: Hier hatte ich gerade ein a-ha - Erlebnis. Ich hatte WSHttpBinding benutzt. Nun habe ich auf BasicHattpBinding umgestellt, und es scheint als ob nun pro ProxyClient-Instanz keine Verbingungen mehr gepoolt werden (ich schliesse die Verbindungen nicht), kann also beliebig Anfragen abfeuern, der Service antwortet immer.

Diese Verbindungen, nehme ich mal an, sind etwas .NET - spezifisches und würden mit einem Client eines Drittherstellers (in meinem Fall Java) sowieso nicht funktionieren, oder?

So wie's ausschaut hängt die ganze Konfiguration des Services auch noch von der verwendeten Standardbindung ab...

Grüsse
sl3dg3

P.s.: Hier ein schöner Artikel, welcher der Unterschied zwischen BasicHttpBinding und WSHttpBinding beleuchtet. Für mich war das sehr hilfreich zu sehen, was in WCF so unter der Haube eigentlich abgeht. Aber für Dritthersteller-Clients (wie z.B. Java) kommt man an BasicHttpBinding wohl nicht vorbei...

18.08.2009 - 09:01 Uhr

Hallo dN!3L

Ja richtig, es scheint als ob mit jeder Proxy-Instanz quasi eine "Verbindung" belegt ist (ich schreibe Anführungszeichen, da ich einen WS als verbindungsloses Konstrukt verstehe und mir deshalb gar nicht klar ist, was unter der Haube passiert). Wenn ich allerdings den Status auf close ( MyService.close() ) setze, scheint die Verbindung wieder freigegeben zu werden.

Es wird so sein dass Anfragen von verschiedenen Clients bzw. Kunden reinkommen werden, und gewisse Anfragen teuer sein können, das heisst mehrere Sekunden DB-Zugriffe belegen können. Dort sollten sich die Anfragen dann nicht gegenseitig blockieren.

Den WCF-ServiceHost hab ich jetzt nur einmal für den Anfang genommen. Zu einem späteren Zeitpunkt dürfte wohl schon ein IIS oder WAS zum Einsatz kommen. Wie verhält sich da ein Service, der mehrere teure Anfragen verarbeiten muss? Ist das konfigurierbar? Oder sollte der Service selbst Threads für die jeweiligen Anfragen an die Geschäftsobjekte starten, um nicht blockiert zu werden? Einfacher wären wohl schon mehrere Instanzen des Service, die sich automatisch an die Anfragen verteilen...

Grüsse
sl3dg3

17.08.2009 - 18:09 Uhr

Hallo dN!3L

Besten Dank für den Link!
Wenn ich jetzt einen Java-Client haben werde, der etwa 100 Kunden gleichzeitig bedienen soll, dann müssten im Prinzip 100 Verbindungen akzeptiert werden, seh ich das richtig? Auf alle Fälle müsste das Ding ja Multi-Threaded laufen, da die DB-Abfragen manchmal teuer sind...

Auf alle Fälle habe ich etwas rumgespielt: wenn ich den Dienst mit Thread.Sleep(x) künstlich schlafen lege, dann müssen alle folgenden Anfragen warten, wenn ich nur mit einer Proxy-Instanz arbeite. Bei mehreren Instanzen des Proxy-Clients bekommt anscheinend jeder Client eine eigene Instanz des Dienstes, also eine eigene Verbindung... dann gibt es keine Warterei bei mehreren Anfragen (habe den technischen Durchblick noch nicht so ganz 😉

Grüsse
sl3dg3

17.08.2009 - 15:53 Uhr

Update: Ich habe gerade bemerkt dass ich für jeden Aufruf die Proxy-Klasse für den Service neu instanziert hatte. Es scheint als ob dies der Grund ist, somit würde sich mein Problem beheben. Aber wieso hat dies ein Problem verursacht?

17.08.2009 - 15:12 Uhr

Hallo Timo

Ja, Du hast natürlich Recht mit In-Memory Caching. Im Prinzip brauche ich nichts anderes.
Ich habe nach Claims-Based Identity gegoogelt, so wirklich das Modell dahinter hab ich noch nicht verstanden. Ich habe fast ein bisschen den Eindruck dass dies zu komplex für meinen doch sehr einfachen Anwendungsfall ist. So was wie Rollen gibt es als Beispiel bei mir nicht. Eigentlich soll bloss die SessionId vergeben und in einem Memory-Pool gespeichert werden. Im folgenden wird diese Id in einer definierten Form bei jedem SOAP-Request vom Client angeliefert.
Deshalb meine ursprüngliche Idee mit dem Windows Service. Dort scheint es aber nicht möglich zu sein, sowas wie ein Interface (mit Parametern) anzulegen und anzusprechen. Z. Bsp. "gibtEsSessionId(sid)" oder "generiereNeueSessionId()" etc.
Darum bin ich jetzt nicht sicher ob das überhaupt geht mit einem Windows Service bzw. Deamon.

Grüsse
sl3dg3

17.08.2009 - 12:22 Uhr

Hallo!

Möglicherweise was triviales, aber ich verstehe nicht wieso mein erster einfacher Testservice (WCF) nach 10 - 12 (meistens 10) Aufrufen keine Reaktion mehr zeigt. Dabei habe ich eine Konsolenapplikation geschrieben, und einen sehr simplen Service-Contract:

[ServiceContract]
interface IWelcomeService
{
   [OperationContract]
   string WelcomeUser(string user);
}

Hosten tu ich ihn mit ServiceHost, also keine Host-Umgebung wie IIS oder WAS. In der Implementation von WelcomeUser gebe ich jeweils einen Trace in der Konsole aus - nach 10 Aufrufen kommt kein Trace mehr, und der Client (ich habe den Service per Service-Reference konsumiert, läuft lokal auf derselben Maschine) bringt nach einer Minute einen Timeout.

Im Task-Manager steigt der Speicherverbrauch des Services von 25mb auf ca. 28mb an, also keine Explosion, kann mir nicht vorstellen dass hier das Problem liegt.

Um ihn wieder zum Sprechen zu bringen, muss ich jeweils die Konsole schliessen und neu starten.

Was könnte hier das Problem sein?

Grüsse
sl3dg3

17.08.2009 - 11:55 Uhr

Hallo

Basierend auf diesem Thread habe ich mich entschlossen, einen neuen Thread zu eröffnen. Als Fazit aus dem verlinkten Thread bin ich zum Schluss gekommen, einen eigenen, kleinen Session-Manager zu schreiben. Leider fehlt mir noch ein bisschen die Richtung, bzw. das how to.

Ausganslage: Java-Client spricht mit einem WCF-Webservice:*Client meldet sich mit Credentials an *Service retourniert eine Session-Id (bei erfolgreicher Anmeldung) *In allen folgenden Anfragen des Clients wird diese Id übermittelt (deshalb brauche ich eine Session, die die IDs verwaltet, inkl. Timeouts) - ansonsten verweigert der Service jegliche Auskunft

Folgende Möglichkeiten sind mir bisher eingefallen:*Datenbank-gesteuerte Session: Einen zusätzlichen DB-Zugriff für jeden Call möchte ich aber eigentlich eher vermeiden *File-basiert: Sessions könnten in einer Datei verwaltet werden. Aber auch da fürchte ich Performance-Probleme. *Einen Windows-Dienst, der im Hintergrund stets läuft und schaut, ob entsprechende UID (Session-Id) existiert (und nicht abgelaufen) ist, plus sonstige Session-Daten entgegennimmt

Gerade bei Windows-Diensten kenne ich mich nicht aus, und nach dem Lesen der Einleitung bin ich mir auch nicht sicher, ob das das richtige Mittel ist, um einen Session-Pool anzulegen und zu verwalten.

Gäbe es sonst Möglichkeiten für einen eigenen Session-Manager, der für den Web-Service immer ansprechbar und auch sicher ist?

Grüsse
sl3dg3

14.08.2009 - 16:03 Uhr

Ok. Das führt mich schon mal weiter.... Da ich einigermassen neu bin in .NET und noch nie Sessions selbst (d.h. weder per Framework-Möglichkeiten noch von Hand) implementiert habe, was wären da gute Stichworte (oder gar ev. link) um sich schlau zu machen?

Folgende Szenarien könnte ich mir vorstellen:*Datenbank-gesteuerte Session: Einen zusätzlichen DB-Zugriff für jeden Call möchte ich aber eigentlich eher vermeiden *Einen Windows-Dienst, der im Hintergrund stets läuft und schaut, ob entsprechende UID (Session-Id) existiert (und nicht abgelaufen) ist, plus sonstige Session-Daten entgegennimmt

  • Weitere (bessere) Möglichkeiten?

Edit: Habe diesbezüglich hier einen neuen Thread gestartet.

14.08.2009 - 09:38 Uhr

Hallo svenson

Mhmm aber Web-Services ist ein Subset von WCF, richtig? Sonst könnte ich ja keinen Web-Service erstellen...
Nun gut, da ich leider den Wald vor lauter Bäume immer noch nicht ganz sehe, frage ich anders herum: kann ich mit WCF eine Request-übergreifende Session eröffnen, die nichts anderes können muss, als den Client wiederzuerkennen (gemäss meinem oben beschriebenen Szenario), oder missverstehe ich da das WCF-Session-Konzept? In dem von mir oben verlinkten Artikel fallen einige Begriffe wie SecurityBinding, NetTcpBinding, ReliableSessionBindingElement etc. wo ich nicht ganz sehe wie das jetzt für mich von Relevanz wäre 😦
Alles was ich möchte:
Authentifizierung
-> stelle UID aus und behalte diese in einem Behälter (Session)
-> füge ev. noch zusätzliche Daten in diesen Behälter
-> bei nächster Anfrage des Clients schaue im Behälter welcher Eintrag der UID entspricht
Wichtig (wie gesagt): Client kommt aus Java-Welt, also != .NET

Grüsse
sl3dg3

13.08.2009 - 18:27 Uhr

Mhmm, ich glaube ich verstehe nicht ganz. Der Client würde keine Cookies versenden, sondern viel eher im SOAP in einem standardisierten Teil, welcher bei jedem Request mitgeschickt würde, die Session-Id übermitteln. Zumindest so stell ich mir es vor.

13.08.2009 - 17:49 Uhr

Hallo!

Ich bin leider noch nicht auf der Höhe, wie man eine Session kreiert und verwaltet in einem WS, der von WCF generiert wurde. Der Client wäre nicht aus der .NET - Welt (bzw. Microsoft). Ich habe mir die MSDN-Einleitung angeschaut, und bin nun einigermassen verwirrt. D.h. ich weiss nicht ob es das ist was ich brauche:

Der Client soll sich am Service authentifizieren. Der Service soll im Erfolgsfall dem Client eine UID (bzw. Session-Id) zusenden. In allen folgenden Request muss der Client diese UID benutzen, um sich auszuweisen.

Im oben genannten Link steht im Vergleich zu HttpSesstionState (ASP):

ASP.NET sessions provide a general data storage mechanism across requests.

Aber das wäre ja genau was ich brauche: Einen Behälter, in welchem ich die UIDs Request-übergreifend aufbewahren, zusammen mit ev. anderen Daten (Cache). Das wäre auch das klassische Session-Handling, wie ich sie aus der PHP-Welt oder anderen stateless Serverscript-Sprachen kenne. Deshalb verstehe ich bis jetzt auch nicht ganz um was es beim obigen Link denn letzten Endes geht.

Kann mir jemand ein Hinweis geben, ob WCF-Session in meinem Fall das richtige ist?

Grüsse
sl3dg3

13.08.2009 - 12:29 Uhr

Hallo!

Ich stehe ganz am Anfang von WCF und Services. Allerdings möchte ich fundamentale Sachen schon so weit wie möglich von Anfang an richtig lösen. Gegeben sei ein ganz einfaches Beispiel:

[ServiceContract]
public interface IWelcomeService
{
  [OperationContract]
  Customer GetCustomer(int customerId);
}

Ich frage mich nun, was die typische Vorgehensweise ist, wenn der Kunde beispielsweise nicht gefunden werden kann. Sollte ich dann einen eigenen Fehlervertrag (FaultContract) implementieren und einen solchen schmeissen, wo dann sowas "Kunde konnte nicht gefunden werden!" drinnsteht?

Es geht mir darum herauszufinden, wie ich allgemein logische Fehler (die durchaus vom Client selber verursacht werden können) behandeln und dem Client mitteilen soll, also nicht die technischen wie "ups, DB nicht erreichbar". Macht man dies mittels dieser Faultcontracts, wo man die sprechenden (und sprachabhängigen) Nachrichten reinsetzt? Oder gibts da noch andere Vorgehensweisen?

Grüsse
sl3dg3

12.08.2009 - 18:48 Uhr

Danke für Deinen Beitrag! Spätestens beim Versagen des ersten Prototypen wird mir diese Info wohl nützlich sein...

12.08.2009 - 14:06 Uhr

p.s.: HTML und CSS waren/sind ja auch Standards - wenn ich jetzt da so an den guten alten IE 6 denke... deshalb meine Bedenken.
Ich glaube daraus hat MS auch gelernt 😉){gray}
mfG Gü

Ok! Müssten sie eigentlich... 😃

12.08.2009 - 13:55 Uhr

Hallo gfoidl

Es werden wohl nur primitive Datentypen verschickt. D.h. es werden keine Objekte serialisiert. Somit gehe ich eigentlich mal davon aus, dass ich mit den Datentypen keine Probleme haben sollte...

Grüsse
sl3dg3

p.s.: HTML und CSS waren/sind ja auch Standards - wenn ich jetzt da so an den guten alten IE 6 denke... deshalb meine Bedenken.

12.08.2009 - 13:23 Uhr

Um auf dieses Thema zurückzugreifen: Ich habe mir das oben verlinkte Buch gekauft und etwas reingelesen. Was mir bis jetzt allgemein noch nicht klar ist: Mal angenommen, ich nehme das von gfoidl vorgeschlagene BasicHttpBinding, wird dann ein Java-Client das von WCF generierte WSDL uneingeschränkt konsumieren können? (d.h. ohne Probleme Proxy-Klassen generieren) Oder gibt es da Stolpersteine die man im Hinterkopf haben muss? Ich könnte mir vorstellen, dass in einem vom WCF generierten WSDL noch einiges an Microsoft-spezifischen und nicht standardisierten Dingen drinnsteht, bei welchen ein nicht WCF-Client auf die Nase fliegen würde. Und falls ja, nehme ich an man müsste deklarativ (also per config) noch in diesem Hinblick etwas Hand anlegen, um alles nicht standardisierte zu bereinigen.

Wie ist da Eure Erfahrung?

Grüsse
sl3dg3

05.08.2009 - 15:55 Uhr

Danke für den Hinweis!
Und falls jemand vielleicht noch ein gutes Buch zu WCF kennt? Ich habe dieses ins Auge gefasst, das scheint einiges über WCF abzudecken...

Grüsse
sl3dg3

05.08.2009 - 14:54 Uhr

Moin moin

Die Ausgangslage ist ein Web-Front auf Java-Basis eines Drittherstellers, welches mit einem (noch nicht existierendem) .NET - Business-Layer kommunizieren soll. Um diese Kommunikation zwischen diesen beiden grundverschiedenen Plattformen sicherzustellen, ist mir WCF und Soap durch den Kopf gegangen. D.h. der Hersteller des Frontends bekommt letztendlich bloss eine WSDL, um den Service konsumieren zu können.

Da ich aber keine Erfahrung damit habe: Wäre dies die gängigste (und hoffentlich praktikabelste) Lösung? Oder gäbe es noch andere Ansätze?

Grüsse
sl3dg3

05.08.2009 - 09:22 Uhr

Danke Euch für die Links! ... auf den .NET Applikationsserver bin ich bereits über Deinen Blog gestossen, Rainbird 😉 werde mir dies gerne anschauen, ich hoffe ich werde das Konzept dahinter verstehen.

Naja, vielleicht befinde ich mich allgemein ein bisschen auf dem Irrweg in der Meinung, dass vor 10 - 15 Jahren alles viel schwieriger zu entwickeln war, und heute mit den mächtigen Frameworks wie .NET oder J2EE alles viieeel "eleganter" und "aufgeräumter" daher kommen sollte.
Aber das Gebiet war, ist und bleibt wohl eine tägliche Herausforderung, vor allem bei Neuentwicklungen. 🙂 Das schwierigste sind wohl grundsätzliche Entscheidungen, welche Methodik nun am ehesten zum Erfolg führen wird. Dies ist ganz besonders dann schwierig, wenn man damit noch nie damit gearbeitet hat. Man kann zwar viel darüber lesen, aber die Entscheidung nimmt es einem nicht ab.

Grüsse
sl3dg3

04.08.2009 - 10:42 Uhr

Hallo Rainbird

Dein Blog-Eintrag klingt in der Tat eher negativ was dies anbelangt. Nun, ich kann aus mangelnder Erfahrung weder dafür noch dagegen argumentieren. Allerdings hat gerade Fowler in diese Richtung keine negativen Äusserungen gemacht, was OOP und Enterprise anbelangt - aber eben, es gibt wohl viele Geschmacksrichtungen... und ich steh immer noch wie ein Ochse vor dem Berg 😉

Grüsse
sl3dg3

03.08.2009 - 15:56 Uhr

Hallo!

Ich habe in letzter Zeit einiges über DAO-Pattern in Kombination mit Business Layer (BL) gelesen. Die Idee, die BL vom der Persistenzschicht komplett zu entkoppeln, scheint bei komplexen Geschäftsvorfällen anstrebenswert.
Nun verstehe ich aber (noch) nicht ganz, wie man sich zwischen dem DAO/DTO-Pattern und einem ORM wie Entity Framework oder NHybernate entscheiden soll? Im Prinzip entkoppeln ja beide die BL von der Persistenzschicht.

Aber vielleicht sollte ich etwas weiter ausholen: Unser bestehendes Datenmodell wird mit Meta-Daten ergänzt. Zum Beispiel: Über jede Tabelle gibt es die Meta-Information, ob die darin enthaltenen Daten bei einer Änderung historisiert werden sollen oder nicht. Unser bestehender Data Access Layer (VB 6) regelt dies an zentraler Stelle.

Beim DAO-Pattern würde ich mir dann ein BaseDAO vorstellen, von welchem alle DAOs erben würden. In dieser Basisklasse würde die Meta-Information gelesen, und, falls erwünscht, bei einer Änderung des Datensatzes die vorangehenden Daten historisiert werden.

Wie (und wo) man dies allerdings bei einem ORM anpacken müsste, da fehlt mir bis jetzt jegliche Erfahrung. Das heisst ich weiss noch nicht einmal ob das gehen würde. Oder wäre das bereits ein Killer-Kriterium für einen ORM? Müsste man mit wie oben beschriebenen Meta-Daten zwangsläufig mit DAO arbeiten?

Oder was könnte noch als Richtlinie für eine Entscheidung weiterhelfen?

Grüsse
sl3dg3

03.08.2009 - 11:10 Uhr

Hallo Rainbird

Vielen Dank für Deine ehrliche Antwort.
Das stimmt, mit COM+ haben wir natürlich bereits mit einer Enterprise-Technologie zu tun. Und es gibt schon etliches Know-How über Multi-Tier Architekturen, das auch bestimmt mit neuen Technologien hilfreich sein wird. Daran wird sich wohl nicht viel ändern.
Allerdings setzen die meisten Programmierer hier auf ein bestehendes (eben COM+) Framework auf, und sind somit als Anwender dieses Frameworks eher auf Umsetzung von Geschäftsvorfällen beschäftigt. Das heisst, das fachliche Wissen ist bei Ihnen sehr gross, der Fokus liegt dann aber weniger auf IT.
Für die Anwendung des bestehenden Frameworks ist das absolut ok. Wenn es dann aber zur Gestaltung eines neuen Frameworks mit neueren Technologien kommt, fürchte ich eben dass das allgemeine Know-How der moderneren Hochsprachen halt einfach ein bisschen fehlt, wie OOP. Klar, man hat schnell ein Buch darüber gelesen, aber ob das reicht? ... aber viele andere kämpfen da wohl mit ähnlichen Problemen.

Richtig, vor lauter Patterns sollte man den Wald vor lauter Bäumen nicht aus den Augen verlieren. Die Gefahr liegt in einer Überanwendung, das sehe ich auch so. Dennoch, gerade der Modell-getriebene Ansatz hat mich bis jetzt ziemlich überzeugt, vor allem wenn es darum geht, komplexe Geschäftsvorfälle sauber zu kapseln. Ich glaube, da lohnt sich dann der ganze Overhead von einem ORM. Nur fehlt mir halt gerade hier jegliche Erfahrung, und man steht dann ein bisschen wie ein Ochse vor dem Berg.

In Sachen Literatur orientiere ich mich eher an den "Klassikern", ich versuche auch möglichst alles was gerade hip ist zu vermeiden. Die Gefahr, dass morgen wieder alles anders ist, ist einfach zu gross.

Inspiriert hat mich zum Beispiel Martin Fowler:
PoEAA
Desweiteren möchte ich gerne noch dieses Buch (Eric Evans) verschlingen bei Gelegenheit:
Domain Driven Design

Soweit ich das nun ein bisschen verfolgt und darüber gelesen habe, kann die Stärke von OOP gerade beim Domain Driven Design in Verbindung mit irgeindeinem ORM ausgespielt werden... Aber vielleicht gibt es auch gute Gründe (die ich noch nicht kenne), diese Methodik eben nicht einzusetzen.

Grüsse
sl3dg3

30.07.2009 - 11:50 Uhr

Hallo zusammen!

Bei meiner jetzigen Arbeitsstelle stehen voraussichtlich umfangreiche Neuentwicklungen an. Das bisherige Framework basiert auf VS & / COM+ und kommt langsam aber sicher in die Jahre.

Da wir bisher auf der Microsoft-Schiene gefahren sind, liegt die Einführung von .NET auf der Hand. Nun, ich habe in den letzten Monaten einiges über Domain Driven Developement, Test Driven Developement und Enterprise Appl. Architecture - Patterns gelesen. Je mehr ich darüber lese, desto länger scheint die Liste, was ich überhaupt zuerst lernen muss, bevor ich ein solches Grossprojekt überhaupt erfolgreich anpacken kann. Das hauptproblem: in unserem Team hat kaum jemand Erfahrung mit diesen Themen, ich kann diesbezüglich also von niemandem lernen hier und müsste alles selber erarbeiten.

Deshalb wollte ich euch fragen: wie wurdet ihr zu Enterprise-Profis? Wie seit ihr dazu gekommen? Wie würdet ihr meine Situation einschätzen?
Ich bin mir bewusst, dies könnte eine riesige, super Herausforderung sein. Schliesslich kriegt man nicht alle Tage die Chance, ein solches Projekt von Grund auf aufzuziehen. Auf der anderen Seite möchte ich mir auch nicht umbedingt die Finger verbrennen, oder frustriert aus Überforderung täglich meine 8 Stunden absitzen...

Grüsse
sl3dg3

12.06.2009 - 18:35 Uhr

Achso - jetzt ist klar 😃 ... dies ist jetzt ein längerer Thread den du da gepostet hast 😉

12.06.2009 - 17:53 Uhr

*stirnpatsch* du meinst damit dass die Eingabefelder automatisch generiert werden, ja?

Komm mir jetzt allerdings ein bisschen doof vor, aber ich schaffe es nicht, mehrere Properties gemeinsam aufs Form zu ziehen. Meine Objekt hat zwar zwei Properties zum binden, kann aber jeweils nur eines gleichzeitig anwählen und rüberziehen... macht es denn überhaupt einen Unterschied ob ich die zusammen oder einzeln rüberzieh?

Menno, die Lernkurve ist mehr als steil... trau mich fast nicht zu fragen: ist das ein MS-Tutorial, dass du da auf dem Screenshot offen hast?

12.06.2009 - 17:39 Uhr

Da war ich auch schon, aber mir ist nicht ganz klar wie ich da was erweitern kann? grübel
Ich hab da jetzt allerdings auch bloss eine Datenquelle (Klasse) drinn...

12.06.2009 - 17:22 Uhr

mhmm du meinst BusinessObjectBindingSource? In welchem Datenfenster kann ich die inwiefern erweitern?

12.06.2009 - 16:59 Uhr

Aaah Wahnsinn, ja genau jetzt hab ich's auch begriffen 😃 ... schon chic, dann braucht man keine weitere Zeile mehr zu schreiben, um weitere GUI-Elemente mit der BindingSource zu verknüpfen.

Das ist vermutlich kein BusinesObject, sondern die BusinesObjects sind da drinne.

Ist genau so wie du es vermutest - sorry für die doofe Benamsung.

Danke für deine Mühe, wieder was gelernt!

12.06.2009 - 16:35 Uhr

mhmm also die Datenquelle (business - class) hatte ich natürlich wie von dir beschrieben vorher hinzugefügt, sonst hätte ich sie ja auch gar nicht auswählen können im Designer beim Versuch, die TextBox daran zu binden. Das DataGrid hatte ich auch so im Designer damit verknüpft.

Zur Laufzeit musste ihr eine richtige BindingList mit solchen Objekten zuweisen, dann flutschts.

Das entspräche dann meiner zweiten Code-Zeile, ja? Das heisst, anders gehts in dem Fall gar nicht?

12.06.2009 - 15:56 Uhr

Hallo!

Ich habe ein DataGrid und eine Textbox. Das Binden an die Textbox meines Business-Obj (welches von BindingList erbt) geht soweit wunderbar:

dataGridView1.DataSource = businessObj;
textBox1.DataBindings.Add(new System.Windows.Forms.Binding("Text", businessObj, "Name"));

Das Schema habe ich bereits im Designer an das DataGrid gebunden. Gerne hätte ich anstelle der zweiten Code-Zeile das Binding an die Textbox über den Designer vorgenommen, das müsste doch gehen? Ich gehe im Property-Window unter DataBindings mein Business-Objekt und das dazugehörige Property anwählen. Doch die Textbox bleibt so immer leer.

Geht das nicht alleine über den Designer?

Grüsse
Oliver