Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von UNeverNo
Thema: Umsetzung von Filtern für DB-queries in Razor Pages
Am im Forum: Web-Technologien

Ich zerbreche mir gerade den Kopf wie ich schönstmöglich Filter darstellen und vom Benutzer befüllen lassen kann, so dass im Anschluss die DB damit gefüttert wird.

Aktuell mache ich es so:

Ich lege mir für die Controls, die als Filter dienen jeweils ein Feld (als string oder string[]) im Model an :

        [BindProperty]
        public string[] FilterSelectedInternalStates { get; set; }

und weise das dann den Controls als Rückgabewert zu:

    <form id="form_Paging" method="post">
        <div id="filtercriteria">
            <!-- die Klasse wird über jQuery entfernt wenn der Wert als Filterkriterium hinzugefügt wird -->
            <div class="hidden">
                <div>X</div>
                @Html.Label("", "Status:")
                <select asp-for="FilterSelectedInternalStates" asp-items="Model.InternalStates"></select>
            </div>
            <!-- hier aktivieren wir die zu verwendenden Filter -->
            <div class="floatleft">
                @Html.Label("", "Filter:")
                <select id="filter" asp-items="Model.Filters" onclick=""></select>
            </div>
        </div>
        <div>
            @Html.HiddenFor(item => Model.CurrentPage)
            @Html.HiddenFor(item => Model.MaxPage)
        </div>
    </form>

Außerdem hier zu sehen die Dropdownlist, über die ich die verwendeten Filter ein- bzw. ausblende. Die Filterwerte definiere ich im Model im Konstruktor wie folgt:

 Filters.Add(new SelectListItem() { Text = "", Value = "" });
 Filters.Add(new SelectListItem() { Text = "Status", Value = nameof(FilterSelectedInternalStates) });

Die Sichtbarkeit steuere ich über jQuery:
$(document).ready(function() {
    $('#filter').change(function () {
        //this returns the value of the list - getting the element by id
        //remove .hidden class        
        $('#' + this.value).parent().removeClass("hidden").addClass("floatleft");
        //hide entry
        $(this).find(':selected').addClass("hidden");
        //set selection
        $(this).val('');
    });

    $('div.hidden > div').click(function() {
        //add .hidden class
        $(this).parent().removeClass("floatleft").addClass("hidden");
        var value = $(this).siblings('select').attr('id');
        $('#filter').find('option[value=' + value + ']').removeClass("hidden");
    });
});
Nun frage ich mich ob es da nicht vielleicht etwas gibt, was so etwas in der Art schon macht, komme mir nämlich gerade so vor, als würde ich das Rad neu erfinden - und besonders schön sieht es aktuell noch nicht aus, abgesehen davon, dass ich noch nicht gelöst habe, wie ich den Filter denn am besten anwende.
Denn ich las von PRG und frage mich, wie ich das jetzt am besten umsetzen würde? Ich habe einen Klick auf den 'Filter anwenden'-Button, löse einen Post aus, der mich auf eine neue Seite leitet, wo dann die Filterung erfolgt und dann (wann/wie?) leitet sie wieder auf die ursprüngliche Seite weiter?

Also eigentlich zwei Fragen - gibt es sowas irgendwo (Nuget/Blog) schon in schön? Kennt ihr was?
Wenn nicht, wie kann ich es mit PRG umsetzen?

Thema: Xamarin.Forms-Schulung gesucht
Am im Forum: Smalltalk

Hi, ich meine tatsächlich eine reale Person :)

Thema: Xamarin.Forms-Schulung gesucht
Am im Forum: Smalltalk

Ich suche nach einer Schulung, die keine Themen wie "Installation", "Vergleich mit HTML5" beinhaltet, ich möchte mich nur mit Xamarin.Forms befassen.

Kann da jemand was empfehlen?

Thema: S: Buch/eBook/Videoreihe zum Thema Klassendesign am praktischen Beispiel
Am im Forum: Buchempfehlungen

Danke Euch, ich werde die Links mal sichten

Thema: S: Buch/eBook/Videoreihe zum Thema Klassendesign am praktischen Beispiel
Am im Forum: Buchempfehlungen

Zitat von LaTino
Freeman, Robson, Bates, Sierra: Head First Design Patterns.

Die Gang-Of-Four-Entwurfsmuster ausführlichst erklärt, begründet und anhand von praktischen Beispielen implementiert. Bonus: das Buch verwendet Java als Sprache, so dass man den Code der Beispiele nicht 1:1 übernehmen kann, sondern nachdenken und ihn anpassen muss. Hat sich gezeigt, dass auf die Weise sogar mehr hängenbleibt.
Das Buch habe ich schon und finde es tatsächlich sehr gut. Ich suche so etwas an einem konkreten Projektbeispiel. Ist Dir da etwas bekannt?

Thema: 56 kostenlose E-Books für Entwickler
Am im Forum: Buchempfehlungen

Hier mal der aktuelle Link. Aktuell sind es sogar schon 122 Bücher:

http://www.dotnetpro.de/update/lesenswert/122-kostenlose-buecher-entwickler-1174690.html

Thema: S: Buch/eBook/Videoreihe zum Thema Klassendesign am praktischen Beispiel
Am im Forum: Buchempfehlungen

Kennt jemand etwas, was sich mit Architekturentscheidungen auseinander setzt?
Stichworte: Pattern, Vererbung, Interfaces.

Thema: Tastendruck abfangen, wenn Bestätigungsbutton per Enter gedrückt wurde
Am im Forum: Rund um die Programmierung

Ich habe eine COM-Anwendung, wo ich gern Tastendrücke eines speziellen Fensters abfangen würde, bis ein bestimmter Button gedrückt wird.

Ich habe dazu globale Hooks auf die benötigten Keys per WinAPI gesetzt - das funktioniert.
Per WinEvents erkenne ich ob das Tab der Anwendung wechselt, dann verwerfe ich die Tastendrücke - das funktioniert auch.

Der Baustein, der mir jetzt noch fehlt, ist zu erkennen, wann ein bestimmter Bestätigungsbutton gedrückt bzw. per Enter bestätigt wird.
Ich habe keine Ahnung wie der Button intern heißt, ich kenne nur den Titel des Dialogs (und weiß, dass 'Ja' auf dem Button steht).

Komme ich irgendwie an die Information, dass ein beliebiger Button gedrückt wurde? Filtern könnte ich es mir ja sicher irgendwie selbst.
Ich sah zwar eine Möglichkeit für WinEvents, allerdings erhalte ich keine Callbacks wenn ich es so ähnlich wie hier mache: Setting up Hook on Windows message

Ich verwende nur EVENT_OBJECT_INVOKED statt EVENT_OBJECT_NAMECHANGE - das sollte nach der Beschreibung eigentlich das richtige sein, dachte ich: Event Constants

Ich hab mir den Button auch mal mit Spy++ angeschaut, sehe aber auch kein EVENT_OBJECT_INVOKED.

Thema: .net 3.5 Console: Warten bis alle n Async-Aufrufe beendet sind
Am im Forum: Rund um die Programmierung

Vielen Dank für die Antwort. Es hilft mir schon ein wenig weiter, allerdings ist das Verhalten immer noch "komisch".

Die Callbacks werden öfter gerufen als sie sollten - wenn ich 5 Elemente in der Liste habe - 10x.


        private bool Work()
        {
            _waiter = new CountdownEvent2(lstsDBAliasNames.Count);
            foreach (string sName in lstsNames)
            {
                oWS.WMGetDataAsync(sName, sName);
                oWS.WMGetDataCompleted += new WMGetDataCompletedEventHandler(oWS_WMGetDataCompleted);
            }
            _waiter.Wait();

            return true;
        }

        void oWS_WMGetDataCompleted(object sender, WMGetDataCompletedEventArgs e)
        {
            string sDaten = e.Result;
			string sName = e.UserState;
            _waiter.Signal();
        }

Ich bin ein wenig ratlos - es scheint definitiv etwas mit der Synchronität zu tun zu haben - aber was? Im Work dürfte es eigentlich keine Probleme geben, da ja niemand parallel darauf zugreift.

Ich dachte dann, dass es Probleme mit parallelen Callbacks geben könnte, was eigentlich auch keinen Sinn gibt - und ein lock drum herum änderte auch nichts am Ergebnis - hier mal ein Log (Liste: Name1,Name2,Name3,Name4,Name5):

foreach Name1
foreach Name2
foreach Name3
foreach Name4
foreach Name5
callback Name1
callback Name1
callback Name1
callback Name1
callback Name1
callback Name4
callback Name4
callback Name4
callback Name4
callback Name4

Oder brauche ich am Log eine Synchronisierung?

Thema: .net 3.5 Console: Warten bis alle n Async-Aufrufe beendet sind
Am im Forum: Rund um die Programmierung

Ich hab schon ein wenig zum Thema gegoogelt, aber alle Treffer beschäftigen sich irgendwie mit Task als Rückgabeobjekt.

In meinem Fall rufe ich Async-Methoden von ASP.NET, die void als Rückgabetyp haben. Ich möchte nun sicherstellen, dass meine Konsolenanwendung erst dann beendet wird, wenn alle offenen Completed-Events gefeuert wurden.

Aktuell denke ich darüber nach jeden Aufruf über i++ zu inkremieren und jedes Completed-Event dies über i-- dekremieren zu lassen. Der Main-Thread läuft über while (i>0), allerdings erscheint mir das nicht sonderlich sauber zu sein - gibt es da ein einfacheres Handling, was unter VS 2010/.NET 3.5 verfügbar ist?

Thema: [gelöst] XSLT: Selektionsprobleme
Am im Forum: Datentechnologien

Zitat von Abt
Da Du nicht sagst, was Du mit dem Setzen des NS erreichen willst, kann ich Dir auch keinen vernünftigen Endvorschlag machen.
Naja wie gesagt, die XML bekomme ich so, ich hab mir da gar nichts bei gedacht
Zitat von BhaaL
Morgen!
Der "Name" vom Root-Knoten ist nicht "nachricht", sondern "{http://mynamespace.de/123}nachricht" (der Namespace - bzw. spezifischer die URI gehört da mit dazu).

Dein X-Path "/nachricht" matcht aber nur auf "nachricht" - drum kommt nix raus.
Zumindest mit X-Path 1.0. In X-Path 2.0 gibts die sogenannten Context-Namespaces, mit denen man sowas machen könnte; aber dafür braucht man halt auch die entsprechenden Libraries.

Wenn dir der Namespace bekannt ist, vergib einfach ein Prefix im XSLT, und benutz das:
<xsl:template match="/myns:nachricht" xmlns:myns="http://mynamespace.de/123">
  <xsl:for-each select="myns:ebene1/myns:liste/myns:ebene2/myns:ebene3.1/myns:ebene4.1">
    [...]
Dank Dir das funktioniert
Ich verwende wie gesagt Saxon, das unterstützt X-Path 2.0.

Thema: [gelöst] XSLT: Selektionsprobleme
Am im Forum: Datentechnologien

Mhh aber Saxon funktioniert bei mir auch nicht. Wie genau hast Du es denn in Visual Studio transformiert? Kann es sein, dass Visual Studio da nicht so genau ist bei Namespaces?

Ich habe es jetzt noch auf W3School versucht (http://www.w3schools.com/xsl/tryxslt.asp?xmlfile=cdcatalog&xsltfile=cdcatalog), da bekomme ich auch ein Ergebnis, allerdings ziemlichen Quatsch, nämlich 0001 0002 0702 0707, erwarten würde ich <text></text> oder <text/>, was kam denn bei Dir im Visual Studio?

Und war es nicht so, dass Visual Studio nur XSLT 1.0 unterstützt?

Thema: [gelöst] XSLT: Selektionsprobleme
Am im Forum: Datentechnologien

Hi, der Namespace ist vorgegeben. Ich habe das Problem nur etwas verkürzt/vereinfacht.

Deine beiden Vorschläge scheinen nicht zu funktionieren. Sowohl das hier (http://www.freeformatter.com/xsl-transformer.html) als auch Saxon wirft (wenig aussagekräftige) Fehler.

Meine Beispiel-Xsl funktioniert ja auch (wenn der Namespace entfernt werden würde).

Thema: [gelöst] XSLT: Selektionsprobleme
Am im Forum: Datentechnologien

Ich habe folgende XML-Datei:


<?xml version="1.0" encoding="utf-8"?>
<nachricht xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://mynamespace.de/123">
  <ebene1>
    <kopf>
        <code xmlns="">0001</code>
    </kopf>
    <liste>
      <ebene2>
        <ebene3.1>
          <kopf>
            <typ>
              <code xmlns="">0002</code>
            </typ>
          </kopf>
          <ebene4.1> <!--das möchte ich selektieren -->
            <typ>
              <code xmlns="">0702</code>
            </typ>
          </ebene4.1>
        </ebene3.1>
      </ebene2>
      <ebene2>
        <ebene3.2>
          <kopf>
            <typ>
              <code xmlns="">0707</code>
            </typ>
          </kopf>
          <ebene4.2>
          </ebene4.2>
        </ebene3.2>
      </ebene2>
    </liste>
  </ebene1>
</nachricht>

und folgende Transformation:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://mynamespace.de/123">
	<xsl:template match="/">
		<xsl:for-each select="nachricht/ebene1/liste/ebene2/ebene3.1/ebene4.1">
			<text></text>
		</xsl:for-each>
	</xsl:template>
</xsl:stylesheet>

Allerdings wird eben in for-each nichts selektiert.
Das Problem scheint mit dem namespace zusammen zu hängen, da wenn ich das xmlns="http://mynamespace.de/123" aus der XML-Datei entferne die Selektion funktioniert.

Allerdings sollte es auch irgendwie anders gehen - nur wie?

Thema: [erledigt] Deserialisierung schlägt fehl (xmlns=... wurde nicht erwartet)
Am im Forum: Datentechnologien

Manchmal kann es so einfach sein. Obwohl ich nicht ganz verstehe wieso er den Namespace nicht anhand der Reference.cs erkennt.

Vielen! Dank!

Thema: [erledigt] Deserialisierung schlägt fehl (xmlns=... wurde nicht erwartet)
Am im Forum: Datentechnologien

Ich habe eine wsdl als Service Referenz eingebunden. Mir wird automatisch eine Klassenstruktur erzeugt, die ungefähr so aussieht:

    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18408")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://www.xoev.de/schemata/xkfz/1_1")]
    public partial class xkfzNachrichten : TypeXKfzNachrichten {
    }

    [System.Xml.Serialization.XmlIncludeAttribute(typeof(TypeXKfzFehlernachrichten))]
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18408")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(TypeName="Type.XKfzNachrichten", Namespace="http://www.xoev.de/schemata/xkfz/1_1")]
    public partial class TypeXKfzNachrichten : object, System.ComponentModel.INotifyPropertyChanged {
                
        private vorsystemantrag0707 vorsystemantrag0707Field;        
        private auskunftanfragehalterauskunft0801 auskunftanfragehalterauskunft0801Field;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("vorsystem.antrag.0707", Order=29)]
        public vorsystemantrag0707 vorsystemantrag0707 {
            get {
                return this.vorsystemantrag0707Field;
            }
            set {
                this.vorsystemantrag0707Field = value;
            }
        }
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("auskunft.anfragehalterauskunft.0801", Order=30)]
        public auskunftanfragehalterauskunft0801 auskunftanfragehalterauskunft0801 {
            get {
                return this.auskunftanfragehalterauskunft0801Field;
            }
            set {
                this.auskunftanfragehalterauskunft0801Field = value;
            }
        }       
    }

Ich habe folgende XML-Datei die ich in ein Objekt deserialisieren möchte (die Validierung gegen XSD ist fehlerfrei):
<?xml version="1.0" encoding="utf-8"?>
<_1:xkfzNachrichten xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:_1="http://www.xoev.de/schemata/xkfz/1_1" xmlns:elem="http://www.kba.de/elemente" xmlns:aus="http://www.kba.de/zfzr/auskunft" xmlns:mit="http://www.kba.de/eVB/mitteilung" xsi:schemaLocation="http://www.xoev.de/schemata/xkfz/1_1 D:\XOEV_Produktionsumgebung_XKfz_1_1_1\XKfz\build\xsd\xkfz-kommunikation.xsd">
	<_1:vorsystem.antrag.0707>
           ...
	</_1:vorsystem.antrag.0707>
</_1:xkfzNachrichten>

        public static xkfzNachrichten GetNachricht()
        {
            xkfzNachrichten nachricht = new xkfzNachrichten();
            XmlSerializer serializer = new XmlSerializer(typeof(xkfzNachrichten));
            using (StreamReader reader = new StreamReader(@"c:\2.xml"))
            {
                xkfzNachrichten x = (xkfzNachrichten)serializer.Deserialize(reader);
            }

            return nachricht;
        }
Allerdings bekomme ich folgende Fehlermeldung:

ex.GetBaseException()
{"<xkfzNachrichten xmlns='http://www.xoev.de/schemata/xkfz/1_1'> wurde nicht erwartet."}
    [System.InvalidOperationException]: {"<xkfzNachrichten xmlns='http://www.xoev.de/schemata/xkfz/1_1'> wurde nicht erwartet."}
    Data: {System.Collections.ListDictionaryInternal}
    HelpLink: null
    InnerException: null
    Message: "<xkfzNachrichten xmlns='http://www.xoev.de/schemata/xkfz/1_1'> wurde nicht erwartet."
    Source: "pnlhqhoh"
    StackTrace: "   bei Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderxkfzNachrichten.Read321_xkfzNachrichten()"
    TargetSite: {System.Object Read321_xkfzNachrichten()}

Was mache ich falsch?

Thema: JQuery/JScript: Script löst auf Server Fehler aus, lokal nicht (JQuery Autocomplete)
Am im Forum: Web-Technologien

Ich weiß echt nicht, was die unfreundliche Antwort soll?

Zitat von Abt
Mit der Fehlerbeschreibung kann das so ziemlich alles sein.
Das 100%tig identisch kann man eigentlich ausschließen; sonst würds gehen, wa?
Erst eine Unterstellung. Und ja, die Funktion ist 100% gleich, aber natürlich sind auf der live-Server-Seite mehr Controls und JS-Code, die aber keinen Einfluß darauf haben sollten.
Zitat
Wenn Du keine selbstausführende Funktion verwendest, dann kann es gut sein, dass die Ausführung läuft, obwohl die nötigen HTML Elemente noch gar nicht da sind.
Deswegen verwendet man i.d.R. auch selbstausführende Methoden, da die erst laufen, wenn wirklich alles (nötige) da ist.
Lokal hast Du vielleicht einfach das Glück, dass es einfach schneller lädt.
Wie gesagt poppt ja was hoch, u.a. auch die Textbox mit dem Autocomplete was nicht ausgeführt wird, also daran sollte es nicht liegen.
Zitat
Selbst im jQuery Beispielcode wird auf $(function() {}); hingewiesen und es verwendet. Man muss natürlich auch lesen.
Genau, ich lese nicht, nur weil ich es nicht genauso mache wie es irgendwo gemacht wird.
Zitat
Du sagst zwar, dass Du gedebuggt hast; aber nicht wie.
Ich schrieb doch bereits was von Firebug? Ich habe dort Breakpoints u.a. im obigen Codeblock gesetzt und gesehen, dass er dort auf dem Server nie reinläuft, lokal hingegen schon.
Zitat
Spätestens dann siehst Dus ja. Wir können und werden so ein Debuggung nicht für Dich übernehmen.
Schreib ich irgendwo, dass das irgendjemand machen soll? Ich fragte nach, wie ich an den Fehler der da offenbar auftritt, rankomme - und damit meine ich Tools oder sonstige Vorschläge - und wie mir da console.log() weiterhilft wüsste ich nicht.
Zitat
Aber so ist das stupides Raten mit der Glaskugel.
Ist es, wenn Du andere Vorschläge hast, nur her damit. Danke.

Thema: JQuery/JScript: Script löst auf Server Fehler aus, lokal nicht (JQuery Autocomplete)
Am im Forum: Web-Technologien

Zitat von FZelle
Davon das du eine Function in eine .js auslagerst wird sie noch lange nicht ausgeführt.

Hast du das in eine selbstausführende Funktion geschrieben?
Nein, habe ich nicht.

Wird aber, wie geschrieben, auch so ausgeführt. Das sehe ich im Debugger und auch der Dialog kommt hoch. Wird nur sofort wieder geschlossen.
Zitat von LiMuBai
nur so eine Vermutung.
Die Textbox besitzt nicht rein zufällig runat="server"?
Wenn doch, musst du diese im JS über die Klasse suchen und nicht per ID.
Nein, die Beispiele sind wirklich zu 100% identisch. Die Textbox injeziere ich per JS erst am Anfang der Funktion.

Thema: JQuery/JScript: Script löst auf Server Fehler aus, lokal nicht (JQuery Autocomplete)
Am im Forum: Web-Technologien

Ja, ich hab wie gesagt im Firebug debuggt.

Thema: JQuery/JScript: Script löst auf Server Fehler aus, lokal nicht (JQuery Autocomplete)
Am im Forum: Web-Technologien

Ich habe derzeit ein Problem, was mich ein wenig ratlos macht. Ich habe mir eine Funktion gebastelt, die bei Buttonclick mittels JQuery Dialog und JQuery Autocomplete mich nach Daten in einer Quelle suchen läßt. Das funktioniert als lokale Datei (1.html) wie erwartet.

Wenn ich das Ding jetzt in meine ASP.NET-Seite in einer js-Datei einbette und aufrufe funktioniert nur noch ein Teil davon. So wird der Dialog aufgepoppt, aber nach kurzer Denkpause (der Aufbereitung der Daten) wieder geschlossen. Das Verhalten weicht also von dem lokalen ab. Der Code ist 100% identisch, ich habe es extra nochmal abgeglichen.

Ich konnte jetzt identifizieren, dass er im Autocomplete ein Event offenbar nicht feuert, ich habe aber keine Ahnung wieso nicht.


    var tag = $("#txbSearchDataSource").autocomplete({
        minLength: 0,
        source: function (request, response) {
            //hier kommt er nie rein
        }
    })

Da er den Dialog wieder zuklappt und ein Postback ausgelöst wird, gehe ich eigentlich davon aus, dass ein Fehler aufgetreten ist - gibt es einen Weg an den ranzukommen?

Thema: XML1 <--> XML2 via XSLT
Am im Forum: Datentechnologien

Soweit ich es derzeit sehe brauche ich je Transformationsrichtung ein eigenes XSLT. Korrekt? Gibt es ein Tool, das mir das vielleicht vereinfacht? Auf Basis eines XSLTs das andere generiert oder so.

Könnt ihr Tools empfehlen, die einen in dem Prozess der XSLT-Generierung unterstützen? Kostenlos wäre toll. Oder macht ihr alles mit dem VS?

Thema: Bei Verwendung des SessionStates: System.InvalidOperationException
Am im Forum: Web-Technologien

Hi,

das meinte ich etwa mit dem was ich schrieb. Vielen Dank, hat schön funktioniert

Thema: Bei Verwendung des SessionStates: System.InvalidOperationException
Am im Forum: Web-Technologien

Mhh soweit ich das überblicke beschäftigt sich der Artikel hauptsächlich mit mehreren Thread, die man auch unter Kontrolle hat. In meinem Fall rufen mehrere Instanzen einer Anwendung jeweils eine Webservicemethode auf und unter der Haube ist dann im Backend die im Sessionstate gehaltene Klasse.
Oder übersehe ich was?

Könnte das Kapseln innerhalb der Methoden von Lock/Unlock jeweils innerhalb von lock {} mein Problem vielleicht schon beheben?

Thema: Bei Verwendung des SessionStates: System.InvalidOperationException
Am im Forum: Web-Technologien

Was ich realisieren wollte war ein Locking im Backend. Mehrere Anwendungen holen sich Datensätze mit einer Meldungsnummer und diese Kombination soll eben nur 1x exklusiv abgeholt werden.

Ich habe dazu folgendes Konstrukt gebaut:


private class EVT_Standardeventhandler_Lock
{
	public int Meldungsnummer { get; set; }
	public DateTime Lockdate { get; set; }
}

public class EVT_Standardeventhandler_Locks
{
	List<EVT_Standardeventhandler_Lock> lstLocks = new List<EVT_Standardeventhandler_Lock>();

	/// <summary>
	/// Gibt True zurück wenn Lock erfolgreich gesetzt wurde, sonst False
	/// </summary>
	public bool Lock(int iMeldungsnummer)
	{
		DateTime datNow = DateTime.Now;
		lstLocks.RemoveAll(x => x.Lockdate.AddMinutes(2) < datNow); //alle Locks älter als 2 Minuten sind Schrott -> freigeben

		if (lstLocks.Any(x => x.Meldungsnummer == iMeldungsnummer))
			return false;

		lstLocks.Add(new EVT_Standardeventhandler_Lock() { Lockdate = datNow, Meldungsnummer = iMeldungsnummer });
		return true;
	}

	public void Unlock(int iMeldungsnummer)
	{
		lstLocks.RemoveAll(x => x.Meldungsnummer == iMeldungsnummer);
	}
}
EVT_Standardeventhandler_Locks befindet sich im Sessionstate und von Zeit zu Zeit bekomme ich bei der Any()-Prüfung eine
System.InvalidOperationException: Die Auflistung wurde geändert. Der Enumerationsvorgang kann möglicherweise nicht ausgeführt werden.

Ich schon mal ein wenig Google zum Thema befragt und es scheinen konkurrierende Threads der Auslöser zu sein. Anscheinend ist Any hier nicht threadsafe.

Tja die Frage ist jetzt, ob das irgendwie schöner mit Boardmitteln (.NET 3.5) geht, oder ob ich hier tatsächlich alles auf for-Schleifen-Handling

for (int i = x.Count - 1; i ≥ 0; i--)
umbauen muss.

Thema: Softwarearchitektur Seminar - Empfehlungen
Am im Forum: Smalltalk

Zitat von winSharp93
evtl. würde es helfen, weiter einzugrenzen, in welche Richtung du gehen möchtest - Softwarearchitektur ist jetzt ja auch kein so kleines Feld. Oder geht es mehr "ums Große Ganze"? Best Practices? Entwurfsmuster? Architekturen verteilter Anwendungen? ...?
Ich kann ja mal beschreiben was ich verbessern möchte.

Ich brauche Werkzeuge/Modelle um schneller modellieren zu können.
Ich möchte eine bessere Balance finden zwischen universeller Einsetzbarkeit und schneller Lösung/Umsetzung.
Ich möchte Patterns sinnvoll einsetzen.
Ich möchte bestehende Systeme in vertretbarer Zeit optimieren können.

@Joetempes: War Dein Freund komplett da? Oder nur beim Intensiv-Training? Softskills kann man sich vermutlich sparen.
Hat er die Prüfung absolviert?

Thema: Softwarearchitektur Seminar - Empfehlungen
Am im Forum: Smalltalk

Ich möchte mich architektonisch ein wenig weiterentwickeln und bin derzeit auf der Suche nach einem guten Seminar zum Thema. Es sollte maximal 5 Tage gehen und max. 3k€ kosten.

Ich habe auch schon einige Angebote gefunden, allerdings finde ich kein unabhängiges Teilnehmerfeedback - und das ist mir letztlich wertvoller als klangvolle Namen (wie bspw. Fraunhofer).

Hat vielleicht jemand Empfehlungen für Referenten bzw. konkrete Kurse im Raum FFM/Kaiserslautern?

Thema: Eintrag in Taskleistenkontextmenü aller Anwendungen hinzufügen
Am im Forum: Rund um die Programmierung

Zitat von chilic
In der Registry kannst du das reinfummeln.
In CLASSES_ROOT schauen was bei .exe steht. Bei mir steht da exefile.
Dann bei exefile schauen, dort unter shell einen neuen Schlüssel z.B. "mymenu" erstellen, unter dem einen Schlüssel "command" mit der Kommandozeile drin. Schau dir am besten an was da schon alles drin ist und wie das gemacht wird.
Das ist ein Weg unter XP, man kanns noch anders lösen, aber da wirds komplizierter.
Das ist leider nicht das was ich suche. Ich suche eine Lösung für die Taskbarkontextmenüs

Thema: Eintrag in Taskleistenkontextmenü aller Anwendungen hinzufügen
Am im Forum: Rund um die Programmierung

Mhh bei XP hilft mir das leider nicht weiter und wie es dann bei Windows 8 aussehen soll weiß ich derzeit auch nicht

Thema: Eintrag in Taskleistenkontextmenü aller Anwendungen hinzufügen
Am im Forum: Rund um die Programmierung

Ich würde gerne global das Kontextmenü aller Anwendungen erweitern. Also Rechtsklick auf beliebige Anwendung und dann dort einen Menüpunkt x.

Hat jemand eine Idee, wie man das bewerkstelligen kann? WinAPI? Registry?
Oder nur Subclassing? X(

Thema: Überladungen reduzieren mit Extension Methods oder doch irgendwie anders?
Am im Forum: Rund um die Programmierung

Was mir an dem new Filter einfach nicht so gefällt ist eine Verdopplung der Überladungen, wie ich es oben schon mal versuchte zu beschreiben.
Habe ich standardmäßig

GetXYZ()
GetXYZ(iRow)
GetXYZ(iRow, sTable)

hätte ich nun

GetXYZ()
GetXYZ(oFilter)
GetXYZ(iRow)
GetXYZ(iRow, oFilter)
GetXYZ(iRow, sTable)
GetXYZ(iRow, sTable, oFilter)

Und das würde ich - wenn möglich - verhindern. Oder habe ich mich gerade gedanklich verrannt? Dass ich das selbst umsetzen kann ist klar und das will ich auch

Alternativ könnte man es wohl auch mit optionalen Parametern machen, aber empfindet ihr/empfindest du das als eine saubere Alternative?