Die Idee finde ich gar nicht schlecht. Habe ein bisschen recherchiert. Ich muss auf den User filtern und ich brauche die Sortierung von neu nach alt. Den User kann ich über den Partition Key abbilden und für die Sortierung nach Timestamp gibts wohl nen Trick:
var rowKey = (DateTime.MaxValue.Ticks - Timestamp.Ticks).ToString("d19")
Scheint auf den ersten Blick genau das abzudecken, was ich benötige. Dank dir!
Verwendetes Datenbanksystem: <Azure SQL>
Hallo zusammen,
meine Cloud App loggt aktuell User Daten, welche auch für den User relevant sind, in eine Azure SQL Table. Hier fallen pro Tag etliche 10k Einträge an. Für meine User sind diese Logs sehr wichtig und sie können diese in einer tabellarischen Ansicht auf der Website einsehen.
Von der Struktur sieht die Tabelle so aus:
ID UserId Timestamp Type Message Exchange
Die Anwendung zieht die Daten, gefiltert nach User, via Entity Framework sortiert von neu nach alt aus der DB. Es sind entsprechend auch Indexe gesetzt, nur leider verschlechtert sich der Index schon nach 1 - 2 Wochen immer wieder, da soviel neue Einträge stattfinden, was letztendlich zu Performance Problemen führt. Manchmal dauern einige Queries 1-5 Minuten.
Ich suche nun nach einem anderen performanteren Ansatz die User Daten zu loggen. Ich hatte an eine Document DB wie Cosmo gedacht. Könnt ihr mir mit den Mitteln die Azure bereitstellt eine gute Alternative raten? Denn ich möchte ja auch einigermaßen kosteneffizient bleiben. Aktuell hätte ich nur die Möglichkeit ne fettere DB bereitzustellen, was nicht gerade günstig ist.
Sehr cool. Erfolgt der Swap automatisch oder durch ein manuelles "approval"?
For the record: Ich hab diesen Anwendungsfall tatsächlich recht gut mittels Git Submodules lösen können. Ein push vom Submodule landet dann im jeweiligen Repo des Services und wird dann nach dem Merge auf den Master automatisch von der GitLab CI Pipeline verarbeitet.
Ich hab eine Haupt-Solution, welche die unterschiedlichen Services zusammenfasst, die per Submodule referenziert sind. Dadurch bin ich in der Lage alle benötigten Services in der Entwicklung gleichzeitig zu starten und zu debuggen. Ziemlich komfortabel.
Einzige Wermutstropfen ist, dass Visual Studios Git Integration damit nicht mehr umgehen kann. Das löse ich über die CommandLine oder GitKraken.
Daher noch mal ein spezieller Dank an WarLorD_XaN
Bravo! Super Arbeit. Man könnte meinen ihr habt ein paar erfahrene Berater in euren Reihen, die erfolgreich eine Legacy App ins Jahr 2019 portiert haben 😉
Kennen tun sich die Services nicht. Aber für den Entwicklungs-Workflow finde ich es super smart, wenn ich beispielsweise das Frontend, die API und nen Worker-Service zusammen starten kann. Dann lade ich im Frontend eine Datei hoch, die API verarbeitet diese und legt eine Nachricht auf den Service Bus, worauf hin sich der Worker Service die Nachricht greift und ich bin überall in der Lage in diesen Workflow zu debuggen.
Daher stimme ich dir zu, ich will dahin jeden Servcie separat in einem eigenen Repo abzulegen, aber gleichzeitig diesen Entwicklungs-Workflow beibehalten. Wie würdest du sowas konkret lösen?
Danke für den Hinweis. Kann Visual Studio damit denn umgehen und funktioniert die Git Integration dann noch wie gewohnt? Also, dass Visual Studio die commits in die entsprechenden submodule absetzt, wenn ich die Haupt-Solution auf habe?
Folgendes vereinfachtes Szenario: Ich habe mehrere Services in meiner Visual Solution. Dies gibt mir den großen Vorteil mehrere oder alle Services gleichzeitig zu starten und auch zu debuggen.
Nun möchte ich gerne eine CI / CD Pipeline basierend auf GitLab aufbauen, die bei jedem Checkin neue Docker-Images meiner Services baut. Nachteil hier ist, dass mir nun alle Services neu erstellt werden, wobei ich vielleicht nur einen von zehn verändert habe, da sie alle in einer Solution liegen.
Daher meine Frage: Gibt es Ansätze beide Vorteile zu verbinden? Alle Services in einer Solution fürs debugging und gleichzeitig eine CI / CD Pipeline, die nur die geänderten Services erstellt?
Oder soll ich die Webseite direkt ohne Wordpress und co. bereitstellen
Ganz genau so macht man das.
Bzgl. Authentifizierungsmöglichkeit: ASP.NET Identity
Ich bin mir nicht ganz sicher, ob es das ist was du suchst: aber im Grunde ist es doch nichts anderes als das was in der OWIN Pipeline von ASP.NET stattfindet. Du fügst dort die unterschiedlichen Authentication Provider hinzu, wie Google, Facebook oder eben ein AD. So wie in diesem Beispiel: Link
Im Frontend könntet ihr dann zur Darstellung chartJS verwenden. Dabei spielt es dann keine Rolle, ob das Ganze in einem größeren JS Framework wie Angular läuft oder einer einfachen HTML + Javascript Anwendung.
Woher wissen die einzelnen API´s, das dass Token gültig ist? Ich nehme an, der IdentityServer muss nicht bei jedem Request gefragt werden.
Doch. Genau das muss geschehen.
Wenn ihr nicht zwingend das Ganze als Self-Hosting betreiben müsst, dann wäre es durchaus eine Überlegung wert mal die Dienste von https://auth0.com/ anzuschauen. Damit schützt du deine APIs / Services mit sehr geringen Aufwand. Einfach mal ein paar Tutorials dazu anschauen. Es ist wirklich einfach einzurichten.
Blockchain als Basis ist nicht mehr wegzudenken; egal ob nun bei Währungen der Zukunft oder bei technischen Umsetzungen wie börsenloser Energiehandel.
Ganz genau. Ethereum im Bereich der Smart Contracts oder BitShares im Bereich des Börsenhandels haben das Potential ganze Industriezweige grundlegend zu revolutionieren. Und jeder kann nach wie vor daran teilhaben und aktuell noch sehr günstig investieren.
Die Frage bei Crypto Currency ist eher, ob es Bitcoin sein wird oder nicht.
Ich persönlich glaube, dass Bitcoin - aufgrund der auch hier diskutierten Schwächen - es nicht werden wird. Da sehe ich eher Coins wie Monero technisch im Vorteil. Allerdings bin ich überzeugt davon, dass sich Crypto Currencies mittel- bis langfristig durchsetzen werden. Was das für einen Impact hätte, kann man sich nur schwer vorstellen. Ein Kapitalismus der keine Banken mehr braucht...
Erstaunlich. Auch über 3 Jahre später erfreut sich Bitcoin größter Beliebtheit. Trotz der hinlänglich bekannten Schwächen. Auch wenn es heißt, dass diese zeitnah angegangen werden sollen. Es scheint ganz so, dass sich Bitcoin aufgrund dessen, dass diese Währung als erste am Markt war, nach wie vor einen großen Wettbewerbsvorteil erarbeitet hat. Auch wenn es mittlerweile technisch deutlich bessere Alternativen zu Bitcoins gibt. Ich bin sehr gespannt, wie sich das alles weiter entwickeln wird und wie lange sich Bitcoin halten kann.
Nichtsdestotrotz ist die Blockchain Technologie einer der größten Boom Märkte des IT Sektors und ich denke wir stehen hier noch ganz am Anfang. Wer sich hier frühzeitig mit beschäftigt und klug investiert, kann mittel- bis langfristig sehr viel Geld verdienen.
HTML und CSS haben tatsächlich wenig mit dem Windows Forms Layout zu tun. Ich kann dir auch CSS Flexbox ans Herz legen. Einen guten Einstieg findest du hier:
Ansonsten lohnt es sich auch sehr mal einen Udemy Kurs zu Bootstrap zu kaufen und den mal in Ruhe durchzuarbeiten. Danach sollte dir das Ganze Thema deutlich leichter fallen.
Bau dir doch deine eigene Custom Form, wo solche Einstellungen getätigt werden und lasse alle anderen Forms in deinem Programm von diesem erben.
Ja, ab V4 meine ich. V3 arbeitet noch mit inlinecount.
OData ist nicht einfach eine Json API, sondern ein Hypermedia-Protokoll.
Das ist mir durchaus bewusst. Dennoch finde ich den Ansatz von MS eigentlich sehr smart mit einem einfachen ApiController gewisse OData Funktionalitäten zu bekommen, ohne extra einen vollwertigen OData Endpunkt aufsetzen zu müssen. Schade nur, dass eine so wichtige Funktionalität wie der inlinecount nicht unterstützt wird. Wäre ja eigentlich ein leichtes gewesen die Untersützung auch für diese einfache Json Api mitzuliefern. Aber gut, mit etwas eigenem Aufwand ist es ja auch zu lösen.
quasi alle Resourcen-Systeme in Azure verwenden OData
Genau das ist der springende Punkt. Sobald man einen ApiController und keinen ODataController verwendet, hat man nicht mehr die Möglichkeit per Query Option die Gesamtgröße der Datenmenge mitzubekommen.
Hier für die Nachwelt noch mal meine Lösung, da ich sie etwas von dem Beispiel abwandeln musste:
public async Task<IHttpActionResult> GetData<MyData> options /* ggf. weitere Parameter*/)
{
var result = // Daten abrufen von UnitOfWork, DbContext, etc.
int count = result.Count;
IQueryable results = options.ApplyTo(result.AsQueryable());
return Ok(new PageResult<MyData>(results as IEnumerable<MyData>, new Uri("next-page-uri"), count));
}
Okay, mit diesem Beispiel hat es nun doch geklappt. Unter Punkt "Server-Driven Paging" zweiter Absatz für non-OData formats.
Hallo zusammen,
ich versuche seit einiger Zeit vergeblich ein vernünftiges Paging mit der Web Api zum laufen zu bekommen. Folgendes Szenario:
Ich habe ein Website die per Ajax Call Datensätze von einer Web Api abruft. Dabei kommt mir sehr zu gute, dass ich die Query Optionen die man auch unter OData hat nutzen kann. Also beispielsweise $orderby, $skip und $top. Allerdings sehr großes Manko an dieser Sache ist, dass die überaus wichtige Option $inlinecount=allpages anscheinend nicht richtig unterstützt wird.
Daher kann ich auf der Website kein vernünftiges Paging umsetzen, wenn ich nicht weiß wie groß die Gesamtdatenmenge ist. Ich hab einige Blogartikel zu dem Thema gefunden, wo die Leute auf eine selbstgebastelte Lösung gesetzt haben. Finde ich aber sehr unschön, da ich in den meisten Fällen so die Möglichkeit verliere die Query Optionen zu verwenden. Und extra für sowas einen OData Endpunkt aufsetzen zu müssen, würde ich sehr gerne vermeiden wollen.
Daher meine Frage: Hat schon mal jemand erfolgreich einen Paging Ansatz umgesetzt? Muss ja irgendwie möglich sein. Wie sollen sonst die ganzen modernen Single-Page Webanwendungen sonst einen Web Api erfolgreich konsumieren?
Und was steht denn in der Inner Exception?
Wieso nicht einfach mal auf ausgeschriebene Stellen bewerben (bzw. vorstellen lassen durch Personalvermittler) und konkret nach einem Teilzeit-Modell fragen?
Ich stehe aktuell auch vor dem Problem eine Menge CRUD Backend-Websites implementieren zu müssen. Ich habe deine Idee dazu noch nicht zu 100% verstanden, wie es gelingen soll hierfür ein möglichst einheitliches wiederverwendbares System zu schaffen. Kannst du das ein wenig näher erläutern? Und hast du in der Zwischenzeit hier schon an ersten Versionen gearbeitet?
Hat über ein batch skript geklappt. Danke!
Hallo,
ich habe durch eine fehlgeschlagene Replikation eines MySQL Servers, auf Dateiebene wo die Datenbanken abgelegt sind, etwa 750.000 Dateien. Dies führt dazu, dass sich der MySQL nicht neustarten lässt, da er alle Dateien scannen will.
Gleichzeitig ist es mir unmöglich mit dem Windows Browser den Ordner zu betreten und in dem Zuge dann die Dateien zu löschen. Hat jemand ne Idee wie das möglich wäre?
Klär mich bitte auf. Was ist <select>
dann? Bzw. wo ist der Unterschied?
Aber ich meine aus Euren Zeilen zu lesen, dass man sich Richtung asp.net core bewegen sollte.
Das nicht zwangsläufig. Aber zumindest ASP.NET MVC dort arbeitest du dann mit ganz normalen HTML-Select's HTML Select
Hattest du denn Th69 Vorschlag mal ausprobiert? Und einen Rebuild gemacht? Also dafür gesorgt, dass die Solution einmal komplett gecleaned wurde?
Einen perfekten Mittelweg wird man hier nicht finden.
Doch. In dem man es für den User einstellbar macht 😉
Verwende mal statt double
den Datentyp decimal
. Dieser hat eine höhere Genauigkeit.
Abgesehen von der Quellcodeverwaltung: Ihr müsstet eines der bedien Projekte nehmen die ihr schon habt oder alternativ ein komplett neues nehmen und dieses dann von Hand zusammenführen. Alle Controller usw. von Projekt A in Projekt B verschieben. Wenn es in Projekt B schon Controller mit dem gleichen Namen gibt, dann müssen diese entsprechend von Hand gemerged werden. Habt ihr das hinter euch lässt sich wunderbar in einem der Quellcode-Verwaltungssysteme meiner Vorredner weiterarbeiten.
Das ist mir schon klar. Ich würde nur gerne weg kommen von den selbstsignierten Zertifikaten in unser Firma, die ständig Warnungen in den Browsern produzieren und bei einigen sehr restriktiven Systemen (ich glaube WP8 ist eines davon) nicht mal eine Connection erlauben.
Okay, danke für das Feedback. Dann werde ich mir mal StartSSL anschauen.
Hat jemand die letsencrypt Zertifikate schon auf einem Windows Server mit IIS am laufen?
Bei
$usableHeaders[] = sprintf('%s: %s', $name, $value);
erhalte ich den Fehler > Fehlermeldung:
"Use of unassigned local variable 'usableHeaders'
Hier greifst du auf ein nicht initialisiertes Array zu. Die Deklaration deines Arrays müsste in etwa so aussehen:
String[] usableHeaders = new String[header.Length];
Um LaTinos Beitrag noch zu ergänzen: Man würde in C#, in dem von PaBa konstruierten Beispiel, wohl eher eine Collection mit Key-Value Paaren einsetzen. Etwa einer HashTable
oder einem Dictonary
Dann solltest du mal den Debugger verwenden und schauen, ob überhaupt Daten in deiner input Variable stehen [Artikel] Debugger: Wie verwende ich den von Visual Studio?
Es sieht ganz danach aus, dass du hier eine Endlos-Schleife produzierst:
do
{
ausgabe += A;
} while (A != "#");
Enthält der String den du kurz davor ausgelesen hast kein '#' dann wird nie abgebrochen.
Bediene dich doch an den Dojo-Übungsaufgaben der dotnetpro:
Diese Extension schon mal ausprobiert?
https://visualstudiogallery.msdn.microsoft.com/6e54271c-2c4e-4911-a1b4-a65a588ae138
Das ist allerdings meine eigene persönliche Meinung. Mag ja sein, dass es Leute gibt, die WP optisch gelungener finden, als die Konkurrenz.
So ziemlich jeden den Ich kenne der mal ein WP in der Hand hat würde dir wiedersprechen.){gray}
Das würde ich auch absolut nicht ausschließen wollen. Aber rein aus designtechnischen und ästhetischen Gesichtspunkten ein einfaches von vielen Beispielen in folgendem Screenshot: KLICK
Es ist doch absolut unschön Labels einfach abzuschneiden. Ich kenne kaum etwas vergleichbares in der IT Welt was so unschön gelöst wurde. Das war von je her der Hauptgrund, warum dieser Ansatz von MS bei mir auf so wenig Gegenliebe stieß. Das wirkt so halbgar und unaufgeräumt. Aber wie gesagt, das ist Geschmackssache und darüber lässt sich schwer streiten.
[..] die Leute so den Kontakt bekommen wird die Akzeptanz im Privaten dann sehr schnell ansteigen
Wahrscheinlich nur dann, wenn es MS gelingen sollte den designtechnischen Abstand seines OS gegenüber iOS und Android erheblich zu verkleinern. Ich persönlich finde das System einfach nur hässlich und unergonomisch. Das ist allerdings meine eigene persönliche Meinung. Mag ja sein, dass es Leute gibt, die WP optisch gelungener finden, als die Konkurrenz.
Dementsprechend kannst du auch die Ausgabe 2 bedenkenlos nehmen. Wenn es dir darum geht C# ersteinmal zu lernen, dann sind die Themen die dort behandelt werden absolut ausreichend.
Kann ich mit dem FileSystemWatcher auch Ereignisse nach verfolgen, wenn meine Anwendung nicht lief?
Nein, das kann der FSW nicht. Deine Anwendung muss schon laufen, damit das funktioniert. Du könntest deine App ja in den Autostart legen. Damit hast du sie zumindest immer einmal initial gestartet.
Nur so als kleiner Tipp der mir in deiner Klasse gerade aufgefallen ist. Verwende doch die WaitForExit()-Methode, um auf deinen gestarteten Prozess zu warten. Das erzeugt genau den selben Effekt, den du dir da mit dieser etwas unschönen while-schleifen-sleep Kombination gebaut hast 😉
bei einem Stundelohn von 25 Euro
Die Freenlance Stundenlöhne von .NET Entwicklern bewegen sich grob irgendwo zwischen 60-80 EU die Stunde.
Dem muss ich mich nun auch noch mal anschließen. Vielen Dank an dieser Stelle für all deine Leistungen hier auf myCSharp.de. Auch mir hast du an etlichen Stellen immer wieder einen sehr guten Lösungsweg aufgezeigt. Was ich noch erwähnenswert finde, ist die Art der Moderation die du hier ins Forum gebracht hast. Ich habe im Web bisher noch kein Forum gesehen, was so gut moderiert wurde. Wirklich Hut ab!
Mir gefällt der frische Wind den ihr hier als neues Team verbreitet. Passend dazu wurde auch gerade ein neuer Besucherrekord aufgestellt - das ist bestimmt ein Zeichen 😉
Dein geposteter Code-Ausschnitt liefert doch ganz eindeutig wieder eine Liste zurück. Das select f bezieht sich auf einen (oder mehrere) Datensätze deiner Collection Sparverlauf. Mit
foreach (var x in jaehrlicherFilter)
{
Console.WriteLine(x.DeinBeliebigerPropertyName)
}
Kannst du nun auf den oder die selektierten Datensätze zugreifen. Oder alternativ mit
var x = jaehrlicherFilter.FirstOrDefault()
konkret auf den ersten Datensatz (sofern vorhanden)