Laden...

Forenbeiträge von mygil Ingesamt 124 Beiträge

08.06.2017 - 10:06 Uhr

Hallo!

Kann mir jemand helfen die folgende Codezeile zu verstehen?


Action<IEnumerable<string>> dispatcher = (messages) => { SendToClient(messages); };

Wie würde beispielsweise eine längere Schreibweise dafür aussehen?

Hier die Klasse wo der Code derzeit eingesetzt wird:


    public class MessageSenderHub : Hub
    {
        // function
        public void SendToClient(IEnumerable<string> messages)
        {
            foreach (string message in messages)
                Clients.All.broadcastMessage(message);
        }

        // ct
        public MessageSenderHub()
        {
            Action<IEnumerable<string>> dispatcher = (messages) => { SendToClient(messages); };

            // We create a singleton instance of PushMessaging
            PushMessaging.GetInstance(dispatcher);
        }       
    }

Danke für eure Hilfe im Voraus.
Lg Gilbert

30.01.2017 - 14:58 Uhr

Hallo!

Ich sehe das jetzt genau wie ihr bzw. klarer!
Vielen Dank für eure Antworten!!!

Lg Gilbert

29.01.2017 - 20:32 Uhr

Hallo!

Ich hab mal eine Allgemeine Frage was das aktualisieren eurer Visual Studio Projekte angeht:
Haltet ihr eure Visual Studio Projekte (z.b. WinForm Anwendung) an denen ihr fortlaufend arbeitet immer aktuell?

Ein Beispiel:
Aktualisiert ihr eine vor längeren Zeit entwickelten Windows Forms Anwendung mit EF4.0 auf EF6.1.3 bei der nächsten Gelegenheit oder nicht?
Mittels NuGet kann man ganz einfach aktualisieren aber im Code muss dann ggf. an vielen Stellen angepasst werden was natürlich Zeitaufwand bedeutet.

Was mach ihr in diesem Fall? Best Practice?
Immer aktuell halten oder alte Verson belassen?

(Ich tu mir schwer meinem Chef zu erklären warum ich ein paar Stunden für ein neues Update investieren muss ... ^^)

Bin echt gespannt auf eure Meinung 😃
lg Gilbert

25.11.2016 - 08:05 Uhr

Hallo!

Ich sehe schon das läuft nicht auf ein: "Lad dir einfach das folgendes Steuerelement ..." hinaus 😃

Vielen Dank für eure Antworten!
Lg mygil

24.11.2016 - 10:57 Uhr

Hallo!

Ich würde eine ähnliche Funktion wie die Funktion: "Beziehungen" aus Access benötigen: Siehe Screenshot

Der Benutzer soll beispielsweise zwei Listboxen sehen und den Inhalt (z.b. Spaltennamen) zur Laufzeit mittels Drag & Drop verbinden können.
Die Verbundenen Texte sollen dann ersichtlich werden.
(Also alles gleich wie z.b. Access (und viele andere Anwendung) das machen)

Hat jemand einen Tipp für mich?

lg myGil

21.01.2016 - 07:32 Uhr

Hallo!

Ich habe eine kleine WinFrm Anwendung erstellt die ich im Internet vertreiben möchte.

Kunden sollen hierfür ganz klassisch im Internet einen Lizenz Schlüssel erwerben können die dann z.b. aus der 30 Tage Testversion ein vollwertige Anwendung macht. Etwas ganz klassisches halt ...

Meine Frage ist jetzt wie man hierfür am besten vorgeht.
Implementiert man eine Lizenzüberprüfungsfunktion selbst direkt in der Anwendung oder greift man hierfür auf etwas fertiges zurück? Ist das vielleicht Bestandteil der Setup-Routine (InstallShield) oder sowas?

Vielen Dank für euren Tipps im Voraus!
lg myGil

21.01.2016 - 07:18 Uhr

Hallo!

Ich habe eine kleine Windows Forms Anwendung entwickelt die ich mit einer Softwarelizenz ausstatten möchte.
Die Softwarelizenz soll z.b. verhindern, dass jeder die Software vervielfältigen darf und sowas wie wie z.b.: "Software is AS-IS with no guaranteed support.".
Die Software inkl. Lizenz würde ich dann auf einer Webseite anbieten.

Gibt es für so etwas Vorlagen auf die man zurückgreifen kann oder eine Softwarelizenzgenerator den ihr Empfehlen würden?

Danke für eure Tipps!
lg myGil

19.01.2016 - 13:03 Uhr

Hallo!

Vielen Dank für eure Antworten!
Die halfen schon mal sehr bzw. werde mich hier noch deutlich schlauer machen!

lg myGil

19.01.2016 - 12:28 Uhr

Hallo!

Hat jemand eine Idee wie man den Quellcode einer Windows-Forms Anwendung vor .NET Decompiling Anwendungen (z.b. ILSpy oder dotPeek) schützen kann?

Beispiel:
Es geht um eine Anwendung in der man z.b. Verbindungsinformationen zu anderen Datenbanken hinterlegen bzw. verwalten kann.
Natürlich kann man jetzt eine Funktion erstellen mit der die Verbindungsinformationen verschlüsselt und erst dann in eine Datenbank ablegt. Aber die Funktion zum entschlüssel kann mittels Decompiling einfach ausgelesen bzw. dann nachgebaut werden.

Hat hier jemand eine Idee?
Lg myGil

03.12.2015 - 15:07 Uhr

Über Google Analytics erfahre ich alles mögliche.

Diese komischen Zugriffe stammen alle aus Russland und die haben mit dieser Seite nichts zu tun.

Zudem dauert ein Seitenbesuch Ø 0 Sekunden. (Macintosh/Chrome User mit Internetanbieter: (not set) ...).

Deutet für mich alles auf einen Missbrauch hin. Bin mir nur nicht sicher ob ich das einfach ignorieren kann oder weiter beobachten muss.

lg myGil

03.12.2015 - 12:31 Uhr

Hallo!

Ich habe eine ASP.NET MVC Webanwendung erstellt die praktisch niemand kennen sollte. Auf der Webseite habe ich jetzt (Dank Google Analytics) aber festgestellt, dass ich einige merkwürdige Zugriffe darauf habe:

https://www.meineseite.at/?from=http://adf.ly/1SDmxr
https://www.meineseite.at/?from=http://site9573865.snip.to/
https://www.meineseite.at/?from=http://site46342820.snip.to/

Das schaut für mich wie ein Missbrauch aus.
Auf andere Webseiten habe ich diese Zugriffe nicht.

Kanne jemand mit diesem /?from=http... etwas anfangen?

lg myGil

15.10.2015 - 22:26 Uhr

Hallo!

Danke für die Antwort.
Was meinst du mit "in der Route berücksichtigen"?

Folgendes hab ich schon mal probiert und bin gescheitert:
Ich habe eine neue Webseite erstellt und als physischen Pfad einfach nochmals den Ordner der bestehende Seite ausgewählt, in der Bindung den Hostname auf www.domäne1.at geändert und anschließend eine HTTP-Umleitung eingerichtet sodass die Anfragen auf www.domäne1.at/Firma1 laufen. Aber das war blödsinn weil beide Websites sich eine Web.config teilen und beide werden jetzt auf www.domäne1.at/Firma1 umgeleitet.

Irgendwie glaub ich das geht eleganter 😃

lg myGil

15.10.2015 - 20:02 Uhr

Hallo!

Hintergrund:
Ich habe eine ASP.NET Webanwendung für eine Firmengruppe die aus 3 Firmen besteht erstellt.
Da ich 3 unterschiedliche _Layout.cshtml verwende hat jede Webseite ihr fast identes aber doch klein wenig unterschiedliches aussehen mit unterschiedlicher Navigation. Die 3 Firmenwebseiten sollen sich ein Admin-Backend-Teilen.
Soweit klappt alles wunderbar.

Hier meine Frage:
Ist es möglich, dass ich jetzt 3 unterschiedliche Domänen für die eine Webanwendung verwende?

Das Ganze sollte theoretisch dann so aussehen:

www.domäne1.at ---> http://webanwendung/Firma1/Index.html
www.domäne2.at ---> http://webanwendung/Firma2/Index.html
www.domäne3.at ---> http://webanwendung/Firma3/Index.html

Hat hier jemand eine Idee wie man das mit ASP.NET MVC oder mit IIS lösen kann?

Danke für eure Hilfe im Voraus!
lg myGil

04.08.2015 - 07:53 Uhr

Hallo!

Vielen Dank für deine Antwort!

3-Tier Architektur setze ich in größeren Anwendungen schon konsequent und gerne ein. Deine Erklärung ist genau das was ich mir erhofft habe und gibt für mich völlig Sinn!

Vielen Dank!
lg mygil

30.07.2015 - 17:53 Uhr

Hallo!

Meine Frage lautet:
Wie kommt man von einer (1) Datenbank-Entität üblicherweise zur einer (2) Anwendungs-Modell das Methoden und Logiken beinhaltet und anschließend wieder zu einem kompakten (3) ViewModel für die View?

Zusammengefasst:
(1)Datenbank-Entität -> (2)Anwendungs-Model (mit Methoden wie z.b. StarteAuto()) -> (3)ViewModel

Im Detail:
(1) Meine "Datenbank-Entität" besteht natürlich au sehr vielen Feldern:


    public class Job
    {
        public int ID { get; set; }
        public int Nr { get; set; }
        public string Name { get; set; }
        public string Beschreibung { get; set; }
        public string Ausführung { get; set; }
        public string Arbeitsschritt { get; set; }
        public string SqlStatement { get; set; }
        public bool IsTäglichAusführen { get; set; }
        public bool IsWöchentlichAusführen { get; set; }
        public bool IsMonatlichAusführen { get; set; }
        public string KontaktEmail { get; set; }
        public bool IsErrorOnResult { get; set; }
        public bool IsErrorOnNoResult { get; set; }
    }

(2) Mein "Anwendungs-Modell" hat eine Methode: "GetAnzahlErgebnisse()":


    public class DqsJob
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public string Beschreibung { get; set; }

        public int GetAnzErgebnisse()
        {
	    // Hier steht irgendeine Logik die auf eine DB zugreif und irgendwas macht etc ...
            return o.Count;
        }
    }

(3) Meine ViewModel braucht nur noch 2 Felder aber das Ergebnis der Anwendungs-Model-Methode: "GetAnzahlErgebnisse()":


    public class DqsJobViewModel
    {
        public string Name { get; set; }
        public int AnzErgebnisse { get; set; }
    }

So hab ich das jetzt einfach mal ausprobiert und würde klappen aber bin mir nicht sicher ob ich jetzt komplett falsch unterwegs bin:


	private DataQualityServiceEntities db = new DataQualityServiceEntities();

        public ActionResult Index()
        {
            // Datenbank-Entität (viele Felder) -> Anwendungs-Model (Hat Logik und Methoden):
            var query = from j in db.Job
                        select new DqsJob
                        {
                            ID = j.ID,
                            Name = j.Name,
                            Beschreibung = j.Beschreibung,
                            Arbeitsschritt = j.Arbeitsschritt
                        };

            // Anwendungs-Model -> ViewModel (Wenig Felder und Ergebnis der Logik):       
            var query2 = from dj in query.ToList()
                         select new DqsJobViewModel
                         {
                            Name = dj.Name,
                            AnzErgebnisse = dj.GetAnzErgebnisse()	<-- Hier wird Logik des Anwedungs-Models ausgeführt und auf das View Model geschrieben.
                         };

            return View(query2.ToList());

Geht das in die richtige Richtung oder bin ich falsch unterwegs?
Sollte ich besser das Ganze mit nur 2 Klassen (Entität -> ViewModel) und einer Helper-Klasse arbeiten?

Danke & lg Gilbert

09.06.2015 - 07:28 Uhr

Hallo!

@Abt: Danke für den erstklassigen Artikel! (Trifft bei mir 100% ins schwarze!!!)
@Coffeebean: Danke für die Hilfe!

Der Einsatz von ViewModel ist zwar mehr Tippaufwand aber dafür erhaltet man Kontrolle und "Macht" 😃

lg myGil

08.06.2015 - 17:14 Uhr

Hallo Coffeebean!

Ich habe mir jetzt nochmals deine Lösung mit den "ViewModels" angeschaut.
In diesem Fall muss ich aber mittels "Reflection" oder alle Felder einzeln mittels @Html.HiddenFor(p => p.Vorname) wieder zum Controller übergeben oder?

Deine Lösung hab ich jetzt exakt wie folgt ausprobiert: (Deine Lösung bisschen verändert - hoffe ich hab's richtig verstanden 😃


          public ActionResult BewerbungErstellen(string Stellenbezeichnung)
          { return View(Model); } // Hier verwende ich das Entity Model


          [HttpPost]
          public ActionResult BewerbungUeberprüfen(Bewerbung bewerbung)
          {
              //vm mit allen Daten abfuellen und zurückgeben:
                BewerbungViewModel bewerbungVM = new BewerbungViewModel();
                bewerbungVM.AbgeleisteterDienst = bewerbung.AbgeleisteterDienst;
                bewerbungVM.AkademischerTitel = bewerbung.AkademischerTitel;
                bewerbungVM.Anrede = bewerbung.Anrede;
                bewerbungVM.Aufmerksam = bewerbung.Aufmerksam;
                bewerbungVM.Datum = bewerbung.Datum;
                ........
                return View(bewerbungVM)
         }

          [HttpPost]
          public ActionResult BewerbungAbspeichern(BewerbungViewModel bewerbung)
         {
                // Das ViewModel an der stelle wäre jetzt leer wenn ich nicht manuell @Html.HiddenFor(p => p.Vorname) ..... in den HTML Code schreiben würde
         } 

lg myGil

08.06.2015 - 11:48 Uhr

Jetzt klappt es perfekt!
Vielen Dank für die Tipps!

lg myGil

06.06.2015 - 08:44 Uhr

Hallo Palin!

Mit Rechteverwaltung kenne ich mich schon aus aber danke für den Tipp und das mit der ID wäre natürlich völliger quatsch so 😃

lg myGil

05.06.2015 - 19:49 Uhr

Hallo!

Bevor meine Serverseitige validiertung stattfindet wurde sowieso schon Clientseitig validiert:


        // 1. Bewerber möchte neue Bewerbung ausfüllen:       
         public ActionResult BewerbungErstellen(string Stellenbezeichnung)
         ...

        // 2. Serverseitige Validierung der Benutzereingaben nachdem Clientseitige Validierung OK waren:
         [HttpPost]
         public ActionResult BewerbungErstellen([Bind(Include = "ID,Datum,Stellenbezeichnung,Anrede,Nachname,Vorname...")] Bewerbung bewerbung)
        ...

Im Prinzip versuche ich genau das nachzubauen:
Link

Füllt man dort eine Bewerbung aus und klickt anschließend auf [Absenden], dann wird alles nochmals zusammengefasst (als purer Text) dargestellt und man muss nochmals auf [Absenden] klicken.
Genau so wäre das die Anforderung und ich find das auch sehr angenehm und sinnvoll.

@Coffeebean:
Du hast Recht! Mit ViewModels kann ich tatsächlich mittels return RedirectToAction("BewerbungUeberpruefung", bewerbungVM); das Model an eine andere Action übergeben. Danach hab ich schon mal gesucht.

Jetzt habe ich aber noch eine Frage:
So wie in diesem Link muss die Anwendung 3 Dokumente hochladen können.

Falls ich das richtig verstanden habe dann werde ich hier auf ein Problem stoßen weil wenn (a) der Benutzer die Eingaben macht (b) Clientseitig validiert wird (c) Serverseitig validiert wird (d) der Benutzer alles nochmals zur Kontrolle via eigener Action mittels ViewModel übergeben bekommt ... Hab ich dann gerade die Dokumente hin und her geschickt?! Das wäre natürlich nicht so gut.

(Sorry! Ich alter Windows Anwendungen Entwickler tue mich mit diesem HTTP Get und Post noch ein wenig schwer ^^)

Wäre es doch cleverer, wenn ich schon nach dem Client und Serverseitigen validieren (noch bevor der Benutzer es ein zweites mal bestätigt) alles in eine Datenbank speichere.
Anschließend kann ich dem Benutzer nochmals alles sehr einfach anzeigen und ihn alles nochmals bestätigen lassen.
In der Datenbank speichere ich dann halt einfach ein "IsBestätigt"=1 ab und das wars.

Hmm...

Also wenn ich das ganze von Anfang in eine DB speichere und dann wie folgt den Benutzer nochmals bestätigen lassen und in der DB diese Bestätigung nochmals kennzeichne würde das wunderbar klappen:


        // 3. Der Bewerber muss nochmals bestätigen:
        public ActionResult BewerbungUeberpruefung(int id)
        {
            Bewerbung bewerbung = db.Bewerbung.Where(p => p.ID == id).FirstOrDefault();
            return View(bewerbung);
        }

Aber so kann jetzt jeder alle Bewerbungen anschauen indem er einfach die ID im in der Url ändert:

https://www.webseite.at/Home/BewerbungUeberpruefung/47
https://www.webseite.at/Home/BewerbungUeberpruefung/46
https://www.webseite.at/Home/BewerbungUeberpruefung/45

Bin ich auf dem Holzweg?
Bin ich auf dem richtigen Weg und man muss hier jetzt mit Guid.NewGuid() arbeiten und diese ebenso von Anfang an in der DB speichern?

lg myGil

05.06.2015 - 17:20 Uhr

Hallo!

So schaut das jetzt bei mir aus:


        // 1. Bewerber möchte neue Bewerbung ausfüllen:       
        public ActionResult BewerbungErstellen(string Stellenbezeichnung)
        {
            Bewerbung b = new Bewerbung();
            b.Stellenbezeichnung = ViewBag.Stellenbezeichnung;
            b.Datum = DateTime.Now;
            return View(b);
        }

        // 2. Serverseitige Validierung der Benutzereingaben:
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult BewerbungErstellen([Bind(Include = "ID,Datum,Stellenbezeichnung,Anrede,Nachname,Vorname...")] Bewerbung bewerbung)
        {
            if (ModelState.IsValid)
            {
                TempData["b"] = bewerbung;
                return RedirectToAction("BewerbungUeberpruefung");
            }
            return View(bewerbung);
        }
      
        // 3. Bewerber muss jetzt seine Eingaben nochmals überprüfen & bestätigen:
        public ActionResult BewerbungUeberpruefung()
        {
            Bewerbung bewerbung = (Bewerbung)TempData["b"];
            TempData["b"] = bewerbung; // Tatsächlich nochmals notwendig :)
            return View(bewerbung);
        }
        
        // 4. Bewerber hat jetzt alles nochmals bestätigt:
        public ActionResult BewerbungUerberperuft()
        {
            Bewerbung bewerbung = (Bewerbung)TempData["b"];

            // Bewerbung erstellen:
            db.Bewerbung.Add(bewerbung);
            db.SaveChanges();

            return RedirectToAction("BewerbungErstellt");
        }
       
        // 5. Bewerber bekommt Meldung auf den Bildschirm "Vielen Dank für Ihre Bewerbung!"
        public ActionResult BewerbungErstellt()
        {
            return View();
        }

Irgendwie kommt mir das noch komisch vor.
Wahrscheinlich weil mir so eine Bestätigung vor dem speichern eher etwas alltäglich vorkommt und ich von diesem TempData einfach noch nicht viel untergekommen ist. (In der Regel hab ich dann etwas komplett missverstanden oder was anders übersehen ^^)

Wenn ein Profi hier noch einen Tipp für mich hat dann wäre ich natürlich dankbar aber ansonsten belasse ich das jetzt mal so 😃

lg myGil

05.06.2015 - 16:43 Uhr

Hallo!

Mittels folgendem Code erstellt ein Benutzer einen neuen Datensatz:


        // GET: Jobs/Create
        public ActionResult Create()
        {
            return View();
        }

        // POST: Jobs/Create
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind(Include = "ID,Firma,Datum,Stellenbezeichnung,Qualifikationen,Aufgaben")] Jobs jobs)
        {
            if (ModelState.IsValid)
            {
                db.Jobs.Add(jobs);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            return View(jobs);
        }

Ich möchte jetzt, dass der Benutzer bevor er diesen Datensatz erstellt nochmals seine Eingaben auf den Bildschirm bekommt, bestätigt und erst wenn alles passt dann in die Datenbank gespeichert wird.

Probiert habe ich das mittels z.b.:


        // POST: Jobs/Create
         [HttpPost]
         [ValidateAntiForgeryToken]
         public ActionResult Create([Bind(Include = "ID,Firma,Datum,Stellenbezeichnung,Qualifikationen,Aufgaben")] Jobs job)
         {
             if (ModelState.IsValid)
             {
                 db.Jobs.Add(job);
                 db.SaveChanges();
                 return RedirectToAction("JobUeberpruefung", new { job= job}); // <<< NEU
             }  
         } 


public ActionResult JobUeberpruefung(Job job)
{
          ...
}

Aber wenn ich das so mache, dann ist job = null.

Lt. Google Recherche könnte ich das mit TempData lösen:


                ...
                TempData["j"] = job;
                return RedirectToAction("JobUeberpruefung"
       }

        public ActionResult JobUeberpruefung()
        {
            Job job = (Job)TempData["j"];
            return View(job);
        }

Das scheint zu klappen aber wie wird das üblicherweise gemacht?
Wie ist der übliche/moderne/empfohlene Weg hierfür?

Danke & lg myGil

02.02.2014 - 14:12 Uhr

ein Objekt wird - vereinfacht gesagt - freigegeben, wenn es keine Referenzen mehr auf das Objekt gibt bzw. rekursiv nur Referenzen aus Objekten, auf die es keine Referenzen mehr gibt. Außerdem passiert das nicht sofort, sondern erst, wenn der GC es für nötig hält, also oft erst dann, wenn der Speicher anderweitig benötigt wird.

Dafür habe ich mir einen [Button] mit GC.Collect() gebaut bzw. lass ich mir damit aktuellen Arbeitsspeicherverbrauch anezigen.

Wenn du nach dem Dispose also noch eine Referenz auf das Form hat und das ...

Kannst du mir sagen wass ich machen muss damit ich nach Dispose() keine Referenz mehr auf die Form: "frmLieferscheinAdd" habe?

Gilbert

02.02.2014 - 13:42 Uhr

Hallo!

In meiner Anwendung öffne ich mittels dem folgenden Code eine separates Fenster:


            frmLieferscheinAdd f = new frmLieferscheinAdd();
            if (f.Neu() == System.Windows.Forms.DialogResult.OK)
                GetAllLieferscheine();
            f.Dispose();

Mit f.Dispose() möchte ich den verwendeten Arbeitsspeicher wieder freigeben.
Normalerweise klappt das auch bestens aber die BindingSource.DataSource verhaltet sich da anders! Mir ist aufgefallen, wenn ich eine BindingSource.DataSource mit Daten befülle, lässt dieser sich nur wieder freigeben wenn ich **BindingSource.DataSource = NULL ** verwende.

Meine Anwendung hat inzwischen ca. 100 Formulare.
Gibt es eine saubere und geniale Möglickeit wie man dann am besten lösen kann?

Danke für eure Hilfe!

08.02.2013 - 16:35 Uhr

Niemand einen Tipp für mich?!

Einfach fragen wenn ich etwas unverständlich erklärt habe!
Danke!

03.02.2013 - 11:35 Uhr

Hallo Community!

Ich habe eine WCF-Dienstanwendung erstellt und diese in der Web.Config und am IIS-Server so konfiguriert,
dass anstelle von Anonyme Authentifizierung die Windows-Authentifizierung verwendet wird.

Klappt soweit alles bestens!
Jetzt möchte ich die WebMatrix-WebData-DLL Funktionalität in meinem Webservice verwenden!

Dafür füge ich im Visual Studio Projekt die "WebMatrix.WebData"-DLL als Verweis hinzu und aktiviere "Lokale Kopie = True".
Sobald ich das gemacht habe und das Projekt veröffentlicht habe, scheint der IIS sich völlig anders zu verhalten!?

Wenn ich nämlich jetzt mein Webservice aufrufe (http://webserver/WebService.svc) bekomme ich zwar wie erwartet die Aufforderung
zur Kennwort und Benutzername Eingabe, werde aber anschließend auf die folgende nicht vorhandene Seite umgeleitet:
(http://webserver/WebService/Account/Login?ReturnUrl=%2fWebService%2f).

Ich glaube (nach einigen Google-Stunden) dass ich irgendwie ungewollt auf die Forms-Aut. am IIS wechselte oder so ähnlich?!

Wie kann ich das verhindern?
Oder wie kann ich ansonsten die WebMatrix-WebData-DLL-Funktionen (wie z.b. WebSecurity.CreateUserAndAccount(model.UserName, model.Password))
in meinem eigenen WebService verwenden?

Schon mal vielen vielen Dank im Voraus für eure Hilfe!!!
Lg Gilbert

14.10.2012 - 13:02 Uhr

Hallo Abt!

Erstmals Danke für deine Antwort!

Das kommt drauf an, was Du genau machen willst.

Bis jetzt nutzte ich die WCF-Dienste um Funktionalität am Webserver bereitzustellen die z.b. eine Windows-Forms-Applikationen (über Dienstverweise) ansprechen, konsumieren und verwenden konnte.

Mit WebAPI (RESTful + ODATA) kenne ich mich im Augenblick noch nicht aus!
Kann ich damit ähnliches anstellen sodass meine Windows-Forms-Applikation dann diese Methoden nutzen kann oder?

Danke!!
myGil

14.10.2012 - 10:32 Uhr

Hallo Community!

Arbeite gerade an einer ASP.NET MVC 4.0 Anwendung die den SimpleMembership Provider verwendet.
Diese Web-Anwendung soll zudem auch noch WCF-Dienste zur Verfügung stellen.

Meine 1. Frage: Ist das eine gute und moderne Idee MVC 4.0 mit WCF-Services zu verwenden?

Im Augenblick habe ich so ein Szenario im Aufbau und es scheint bis jetzt relativ gut zu funktionieren.
Jetzt komme ich aber an die Stelle, wo man die WCF-Service vor ungewollten Zugriff schützen muss und stelle dabei wie viele andere fest, dass der Teil gar nicht mal so einfach funktioniert wie Anfangs angeonommen 😃
Nach einigen rechergen im Internet/Tutorials fand ich Lösungen mittel eigens erstellten Zertifikaten und Benutzer/Kennwort authentifizierung etc.

Meine 2. Frage:
Jetzt bin ich mir nicht mehr sicher: Einerseits habe ich ein fix fertiges Authentifizierungs/Autorisierungs-Modul durch den SimpleMembership und andererseits muss ich doch anfangen Zertifikate zu erstellen und zu verteilen um die MVC-Dienste zu schützen ... Kann man die WCF-Dienste nicht auch mit dem fix fertigen SimpleMembership irgendwie schützen?

Vielen Dank im Vorraus!
myGil

01.10.2012 - 20:30 Uhr

Hallo Abt!

Vielen Dank für deine Hilfe und sorry wenn ich dich mit meinen Fragen verärgert habe!

lg myGil

30.09.2012 - 23:09 Uhr

Hallo Abt!

Jetzt hast du mich falsch verstanden! Ich wollte natürlich nicht dass du den Code für mich schreibst! Ich erhoffte mir damit ein paar Stichwörter oder noch 1-2 weitere Tipps die mir bei der Suche nach der Lösung meines Problems vielleicht noch weiterhelfen könnten.

lg myGil

30.09.2012 - 22:39 Uhr

Nimm doch einfach direkt die Schnittstelle des MembershipProviders?
MembershipProvider.CreateUser Method

Zur Not kannst Du immer noch eine Schnittstelle direkt an die Webanwendung machen, die das dann als Mass-Insert für Dich übernimmt (so würde auch ich das machen).

Das dürfte das sein was ich suche!
Kannst du mir grob sagen wie das funktioniert oder was ich dafür brauche bzw. wo ich anfangen soll zu suchen?

Danke lg myGil

30.09.2012 - 15:30 Uhr

Und wie kann ich jetzt meine mehreren hundert Benutzer anlegen oder wie erfülle ich die Anforderung von einer Windows Forms Applikation um die Verwaltung der Profile zu ermöglichen wenn ich den Verschlüsselungsmechanismus nicht kenne und dadurch nicht auf SQL-Ebene die DB selbst manipulieren kann?

Die Anforderung ist doch bestimmt nicht so unüblich. Wir möchten aus einer bestehenden Applikation mit einer bestehendem Kundenstamm bestimmten Benutzern per Knopfdruck Zugang gewähren.

Danke myGil

30.09.2012 - 11:42 Uhr

Hallo!

Ich habe eine neue "ASP.NET MVC 4-Webanwendung" mit Form-Authentifizierung erstellt.

Sobald ich die Website gestartet habe und einen neuen Benutzer angelegt habe wurde auf meinem SQLExpress Server eine neue Datenbank:
aspnet-MeineMvcAnwendung-20120930101122
mit den folgenden Tabellen erstellt:
UserProfile
webpages_Membership
webpages_OAuthMembership
webpages_Roles
webpages_UsersInRoles

Folgendes ist mir in etwa klar:
) Ich kann mittels meiner neuen Webseite jetzt also neue Benutzer erstellen.
) Ich kann auch mittels: Visual Studio / Projekt / ASP.NET-Konfiguration / Websiteverwaltungs-Tool neuen Benutzer erstellen.
) Mittels einem eigenes erstellen Membership-Provider könnte ich auch auf eine vorhandene Datenbank zugreifen die Benutzer-Daten und Kennwörter enthält, jedoch wird empfohlen den vorhandenen Membership-Provider zu verwenden.
) Diese autom. erstellte DB besitzt keine Stored-Procedures zum anlegen von Benutzern. (Anders wie bei der selbst erstellten DB via C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_regsql.exe)
) Die Kennwörter in der DB werden verschlüsselt abgespeichert. (Das irgendwie auf "Clear" zu ändern klappte bis jetzt nicht)

Wie kann ich jetzt (z.b. per einer kleinen Windows-Forms Anwendung) autom. jede Menge Benutzer inkl. Kennwörter anlegen ohne mir einen eigenen Membership-Provider zu erstellen?

Das einzige was mich jetzt davon abgehalten hat ist, dass die Kennwörter in der DB irgendwie verschlüsselt werden ...

Hat jemand einen Tipp für mich?

Danke & lg myGil

22.07.2012 - 16:51 Uhr

Mit Linq2Xml und einem Root-Element konnte ich das pefekt Lösen!
Vielen Dank euch beiden!

lg myGil

19.07.2012 - 07:43 Uhr

Hallo!

Poco's verwende ich nicht, aber das ganze aber auch schon mit dafür eigens erstellte View MOdels probiert:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;

namespace DataSetToXML.Models
{
    //[DataContractAttribute()]
    public class PersonViewModel
    {
        //[DataMember()]
        public int PersonID { get; set; }

        //[DataMember()]
        public int? AdresseID { get; set; }

        //[DataMember()]
        public AdresseViewModel adresse;

        //[DataMember()]
        public string Vorname { get; set; }

        //[DataMember()]
        public string Nachname { get; set; }
    }
}

Wenn ich das ganze mit DataSet und DataTable mache, dann bekomme ich so ein Ergebniss wie im Screenshot: Und das wäre perfekt.
Wenn ich das aber mit DataContractSerializer mache, dann hat jede Person darunter seine Adresse stehen und somit kommen Adressen mehrfach vor.

Eine XML soll doch generell auch wie eine Relationale DB aussehen oder?

lg myGil

18.07.2012 - 11:29 Uhr

verwendetes Datenbanksystem: MS SQL Server 2008 Express

Hallo!

Ich verwende in meinen Datenbankanwendungen das EF 4.1 und bin auf der Suche nach einer möglichst sinnvollen Möglichkeiten meine Daten in eine XML zu exportieren.

Kann mir jemand einen Tipp geben wie man das am besten anstellt?

Probiert hätte ich beispielsweise die beiden folgenden Varainten:
1. Per DataContractSerializer:


            XmlTestEntities context = new XmlTestEntities();
            var query = from a in context.Adresse
                        select a;

            if (this.saveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                try
                {
                    using (XmlWriter writer = XmlWriter.Create(this.saveFileDialog1.FileName))
                    {
                        DataContractSerializer serializer = new DataContractSerializer(query.ToList().GetType());
                        serializer.WriteObject(writer, query.ToList());
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

Aber das Ergebniss ist viel zu groß, da ein und der selbe Datensatz immer und immer wieder in der XML vorkommt.

2. Per DataSets u. DataTables und Relations


            if (this.saveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                ds.WriteXml(this.saveFileDialog1.FileName);
            }

Das Ergebniss scheint wunderbar zu sein. Aber ich kann mir nicht vorstellen, dass das manuelle erstellen von DataSets DataTables und Releations der beste Weg dafür ist.

Vielen dank für eure Hilfe bzw. den schupf in die richtige Richtung
myGil

16.07.2012 - 10:51 Uhr

Ich glaube ich habe den Fehler für meine Schwierigkeiten gefunden:
Als Verweis habe ich nähmlich den falschen Pfad verwendet:
C:\Data\Projekte c\clibDz\clibDz(obj){red}\Debug
C:\Data\Projekte c\clibDz\clibDz(bin){seagreen}\Debug\dz.dll

Seit der Korrektur scheint wieder alles bestens zu laufen!
Danke für eure Hilfe!

16.07.2012 - 10:37 Uhr

Hallo!

An XML habe ich zuerst auch gedacht!
Der Gedanke gefällt mir schon mal wobei ich aber XML nur für den EXPORT und IMPORT Prozess einsetzen werde.

Hier mal so meine aktueller Lösungsgedanke:

) Windows Forms Applikation (Aufgrund vorhandem Wissen)
) Am Notebook installiere ich einen lokalen MSSQL Server Express (Aufgrund dem spaßigen Entity Framework!) oder mache mich wegen der kompakteren Lösung mittels MSSQL Compact mal einwenig schlauer...
) XML verwende ich für den IMPORT und EXPORT Prozess.
) Den Export löse ich auf einen der beiden Wege:

  1. Per Knopfdruck wird eine XML erzeugt, sodass diese beispielsweise per Mail verschickt werden kann die wiederum auf dem Server dann importiert werden kann.
  2. Per Knopfdruck wird eine XML erzeugt, die mittels einem Webservice direkt auf einem Online Datenbankserver landet.

Das wäre mal so grob mein Gedanke zur Umsetzung des Projekts.
Wenn jemand noch einen Tipp hat dann jederzeit her damit 😃

Danke & lg Gilbert

16.07.2012 - 06:49 Uhr

Hallo!

Ich hätte folgende Aufgabenstellung:

Und zwar müsste ich eine Datenbank-Applikation erstellen die auf mehrere Notebooks installiert wird.
Die Notebooks haben zum Zeitpunkt der Bearbeitung weder Internet- noch Netzwerkzugriff!

Das Ganze sollte grundlegend kein Problem darstellen, da die Applikation lediglich neue Daten erfasst die zu einem späteren Zeitpunkt auf einen Zentralen Server importiert werden sollen.

Meine Frage lautet: Wie würdet ihr dafür vorgehen bzw. welche Technologien würdet ihr dafür Heutzutage einsetzen?

Danke & lg
Gilbert

04.07.2012 - 10:45 Uhr

Danke für die Antwort!

Aber in meinem Fall funktioniert auch das nicht - nur das neustarten des VS 2010 funktioniert!

Gibt es irgnendwas bei UserControls die man Allgemein noch berücksichtigen muss?

04.07.2012 - 07:28 Uhr

Hallo!

Ich bekomme folgende Fehlermeldung, wenn ich eine Änderung in meinem selbst erstellen UserControl vornehme:

Fehlermeldung:
Das Objekt mit dem Typ "clibUms.GrössenRaster" kann nicht in den Typ "clibUms.GrössenRaster" konvertiert werden.

Weitere Details: (Falls von Interesse)
)Die Fehlermeldung bekomme ich aber nicht zur Laufzeit meiner Applikation sondern im Visual Studio Designer! Und zwar bei jeder Form wo ich dieses Steuerelement verwendet habe.
)Sobal ich Visual Studio 2010 neustarte, kann ich die Form die dieses Steuerelement verwenden wieder ganz normal öffnen.
)Das Usercontrol ist in einer eigenen Klassenbibliothek erstellt und meinem Hauptprojekt als Verweis hinzugefügt worden!

Kennt jemand dafür eine Lösung?

Vielen Dank im Voraus!
Gilli

07.03.2012 - 15:33 Uhr

Verwendete Syteme:
* C#
* Siverlight 4.0
* Silverlight Business Application
* WCF RIA
* Entity Framework 4.1

Hallo!

Plane gerade eine neue Webseite zu erstellen.
Dafür verwende ich: ASP.NET Authentifizierung: FORMS und Silverlight WCF RIA.

Jetzt habe ich eine ganze Menge von Benutzernamen und E-Mail Adressen die (nach und zu) angelegt müsste.

Wie würdet ihr das machen?

Verwendet ihr dafür die "mitgeliferte" ASP.NET-Webanwendungsverwaltung oder schnitzt man sich hiefür etwas eigenes zusammen und verwendet z.b. die SQL Stored Procedure: aspnet_Membership_CreateUser

Beides hätte ich getest und beides würde klappen...

Spricht etwas gegen einer diese beiden Möglichkeiten oder kann ich das nach Belieben verwenden?

Danke!!!
Euer verunsicherter myGil

06.03.2012 - 08:25 Uhr

Vielen Dank für eure Antworten!
@Abt: Auch noch vielen Dank für den Tipp!

lg myGil

05.03.2012 - 17:02 Uhr

Hallo!

Erstmals danke für die Antworten!

Ein Context sollte also so kurz wie möglich leben - eigentlich schade, ansonsten könnte mein Code um einen Benutzer zu ändern so aussehen:


    public partial class Administration : Page
    {
        CmrDomainContext context = new CmrDomainContext();
          ...
        private void buttonPersonSpeichern_Click(object sender, RoutedEventArgs e)
        {
            Person person = (Person)this.xamGridPersonen.ActiveCell.Row.Cells["person"].Value;
            person.IsDivisionMgr = this.checkBoxIsDivisionMgr.IsChecked;
            person.IsCoordinationMgr = this.checkBoxIsCoordinationMgr.IsChecked;
            person.Division = (Division)this.xamComboEditorDivision.SelectedItem;
            person.Name = this.textBoxPersonName.Text;
            context.SubmitChanges();
        }

Aber ich muss ja einen neuen Context erstellen - demnach muss das ganze in etwa so aussehen:


            // PersonID ermitteln:
            int iPersonID = ((Person)this.xamGridPersonen.ActiveCell.Row.Cells["person"].Value).PersonID;

            // Neuen Context erstellen:
            CmrDomainContext c = new CmrDomainContext();
            c.Load(c.GetPersonByIDQuery(iPersonID)).Completed += (a, b) =>
            {
                Person person = ((LoadOperation<CMR.Silverlight.Web.Person>)a).Entities.Single();
                person.IsDivisionMgr = this.checkBoxIsDivisionMgr.IsChecked;
                person.IsCoordinationMgr = this.checkBoxIsCoordinationMgr.IsChecked;
                person.DivisionID = ((Division)this.xamComboEditorDivision.SelectedItem).DivisionID;
                person.Name = this.textBoxPersonName.Text;
                c.SubmitChanges();
            };

Stimmt ihr mir zu / habe ich das richtig verstanden?

02.03.2012 - 14:06 Uhr

verwendetes Datenbanksystem: MSSQL2008

Hallo!

Wie lange sollte eigentlich die Lebenszeit des Context sein?
Windows Form: Ein Kontext für die ganze Applikation??
Web-Anwendung: Ein Kontext per Datenbankänderung??

Danke!!!

29.02.2012 - 16:55 Uhr

Mich würde es schwer wundern, wenn mein Weg normale wäre!
Z.b. muss man alle Tabellen jedesmal manuell anklicken! (Anhang)

lg myGil

29.02.2012 - 13:04 Uhr

Hallo!

Das **ADO.NET Entity Data Model ** verhält sich genau wie du es beschreibst! Aber ich meinte die **Domänendienstklasse **(Domänendienstklasse für WCF RIA Services-Anwendungen)

Derzeit lösche ich diese immer komplett und nach der Änderung am **ADO.NET Entity Data Model ** erstelle ich einfach neu.

Geht das auch einfache?

Danke myGil

26.02.2012 - 00:16 Uhr

MSSQL Server 2008
Windows Forms Anwendung
Entity Framwork 4.1

Hallo!

Ich drehe mich mit dem folgenden Problem im Kreis ...

Bitte schaut euch den folgenden Screenshot im Anhang an und sagt mir welcher Datentyp meine "Bestellungen" an dieser Stelle (grüner Pfeil) haben sollte.
Was ich möchte ist - in weiterere Folge - dass der Anwender diese Bestellung bearbeiten kann und vorallem Bestell-Positionen hinzufügen, ändern und löschen kann!

A)


grid.datasource = context.Bestellung.Execute(MergeOption.AppendOnly)

**b) **Oder sollte ich dafür **ViewModels **erstellen?


    public class BestellungViewModel
    {
        public int BestellungID { get; set; }
        public int? BestellNr { get; set; }
        public DateTime? Datum { get; set; }
        public DateTime? LieferDatum { get; set; }
        public string Bemerkung { get; set; }
        public string Typ { get; set; }
        public string Lieferant { get; set; }
        public string Lagerort { get; set; }
        public string Kopftext { get; set; }
        public string Fusstext { get; set; }
        public List<BestellungDetailViewModel> BestellungDetail { get; set; }
        public List<BestellungVerbrauchViewModel> BestellungVerbrauch { get; set; }
    }

//Busines Logic Layer:
        public List<BestellungViewModel>            GetAlleBestellungenViewModel()
        {
            //dal = Data Access Layer:
            var query = from b in dal.GetAlleBestellungen()
                        select new BestellungViewModel
                        {
                            BestellungID = b.BestellungID,
                            BestellNr = b.BestellNr,
                            Datum = b.BestellDatum,
                            LieferDatum = b.LieferDatum,
                            Bemerkung = b.Bemerkung,
                            Typ = b.Typ,
                            Lieferant = b.Kontakt.Name,
                            Kopftext = b.KopfText,
                            Fusstext = b.FussText,
                            BestellungVerbrauch = (from bv in b.WMS_BestellungVerbrauch
                                                  select new BestellungVerbrauchViewModel
                                                  {
                                                      BestellungDetailID = bv.ArtikelID,
                                                      Artikel = bv.Artikel.Name,
                                                      Menge = bv.Menge
                                                  }).ToList(),
                            BestellungDetail = (from bd in b.BestellungDetail
                                               select new BestellungDetailViewModel 
                                               { 
                                                    BestellungDetailID = bd.BestellungDetailID,
                                                    Artikel = bd.Artikel.Name,
                                                    Menge = bd.Menge,
                                                    PosBeschreibung = bd.PosBeschreibung
                                               }).ToList()
                        };
            return query.ToList();
            
        }

Was wäre an der Stelle richtig?

Vielen Dank für eure Antwort!!!
myGil

13.02.2012 - 18:56 Uhr

Jawohl!!! Danke klappt!

Habe das ViewModel im Client-Bereich erstellt:


    public class AdresseViewModel
    {
        public string Firma { get; set; }
        public string DivisionKürzel { get; set; }
    }

Und im Client-Bereich auch die View-Models erstellt:


                                    var query = from a in context.Adresses
                                                select new AdresseViewModel
                                                {
                                                    Firma = a.Firma,
                                                    DivisionKürzel = (a.Division == null) ? "" : a.Division.Kürzel
                                                };
                                    this.xamGridAlleAdressen.ItemsSource = query;

Und wieder was gerlernt!! Vielen Dank und schönen Abend noch!!!
lg myGil

13.02.2012 - 18:42 Uhr

Hallo!

Erstmals vielen Dank für die Antwort!

Was genau meinst du mit **danach werden lokal ** die ViewModels erzeugt?

ToArray und ToList erzwingen hingegen die Ausführung des Queries und danach werden lokal die ViewModels erzeugt.

Bzw. wo in meinem Projekt (Client oder Webteil) erstelle ich diese ViewModels?

Oder nochmals anders gefragt - bzw. erklärt was ich eigentlich brauche:
Meine Domain Service Klasse hat z.b. folgende Funktionen:


        public IQueryable<Person> GetPerson()
        {
            return this.ObjectContext.Person;
        }

        public IQueryable<Adresse> GetAdresse()
        {
            return this.ObjectContext.Adresse.OrderBy(a => a.AdresseID);
        }

Damit kann ich mir natürlich alle Adressen in einem Grid anzeigen lassen oder alle Personen. Was ich aber brauchen würde, wären Informationen aus beiden Datenquellen - so ca:
Person.VorName | Person.NachName | Adresse.Strasse
Person.VorName | Person.NachName | Adresse.Strasse
Person.VorName | Person.NachName | Adresse.Strasse

Dafür verwendet man doch ViewModels oder bin ich damit auf dem Holzweg?
Ich könnte mir vorstellen, dass ich ein Model (PersonAdresseViewModel) im Client-Bereich erstelle und darin auch erstelle. Aber das gehört doch bestimmt in den Web-Bereich oder?

Danke!!!
lg myGil