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
Hallo!
Ich sehe das jetzt genau wie ihr bzw. klarer!
Vielen Dank für eure Antworten!!!
Lg Gilbert
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
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
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
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
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
Hallo!
Vielen Dank für eure Antworten!
Die halfen schon mal sehr bzw. werde mich hier noch deutlich schlauer machen!
lg myGil
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
Ü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
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
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
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
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
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
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
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
Jetzt klappt es perfekt!
Vielen Dank für die Tipps!
lg myGil
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
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
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
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
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
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!
Niemand einen Tipp für mich?!
Einfach fragen wenn ich etwas unverständlich erklärt habe!
Danke!
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
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
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
Hallo Abt!
Vielen Dank für deine Hilfe und sorry wenn ich dich mit meinen Fragen verärgert habe!
lg myGil
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
Nimm doch einfach direkt die Schnittstelle des MembershipProviders?
MembershipProvider.CreateUser MethodZur 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
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
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
Mit Linq2Xml und einem Root-Element konnte ich das pefekt Lösen!
Vielen Dank euch beiden!
lg myGil
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
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
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!
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:
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
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
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?
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
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
Vielen Dank für eure Antworten!
@Abt: Auch noch vielen Dank für den Tipp!
lg myGil
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?
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!!!
Mich würde es schwer wundern, wenn mein Weg normale wäre!
Z.b. muss man alle Tabellen jedesmal manuell anklicken! (Anhang)
lg myGil
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
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
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
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