Laden...

Forenbeiträge von tequila slammer Ingesamt 253 Beiträge

30.11.2011 - 12:04 Uhr

Alternativ kannst du ja mal googlen, ob es eine Dokumentation des Thunderbird-"Archiv" gibt, dann könntest du deine gesendeten Mails auch darin ablegen.

31.10.2011 - 19:41 Uhr

Ich muss mich leider nach langem testen hier auch einmal melden. Ich habe meine Software mit einem Setup ausgerollt. Nun soll ein Update erscheinen, was leider nicht klappt. Über die Administration ist alles ordnungsgemäß eingestellt und er lädt auch scheinbar Daten herunter, die jedoch nie im Verzeichnis ankommen. Starte ich das Programm nach dem Update erneut habe ich immer noch die alte Version.

Die Version ermittle ich wie folgt:


System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();

Das Update wird mit folgenden Code angeschoben:


var updateController = new updateSystemDotNet.updateController("http://update.meineDomain.de/Mein Produkt/");
updateController.releaseFilter.checkForAlpha = false;
updateController.releaseFilter.checkForBeta = false;
updateController.releaseFilter.checkForFinal = true;
updateController.projectId = "Meine ID";
updateController.publicKey = "Mein Key";

updateController.requestElevation = true;
updateController.restartApplication = true;
updateController.autoCloseHostApplication = true;

if (updateController.isUpdateDownloaderBusy)
    return;

updateController.updateInteractive(this);

Unklar ist auch, wie ich Daten in einem Unterverzeichnis aktualisieren kann. Ich kann zwar einen Ordner auswählen von dem dann der Inhalt erscheint aber wird die Struktur dann auf dem zu aktualisierendem System beibehalten?

EDIT:

Ich habe mal weiter rumgespielt und dabei folgendes herausgefunden. Mein Update funktioniert, wenn ich nur Dateien im Hauptverzeichnis aktualisieren möchte. Unterorder haben bis zu dem Zeitpunkt geklappt, an dem ich eine weitere nicht im Setup gewesene Datei in das Update-Projekt hinzugefügt habe. Seit dem werden die Dateien, die in einen Unterordner sollen auch im Hauptverzeichnis abgelegt.

Meine Idee war nun, das ich mir einfach ein gleichnamiges Verzeichnis erstelle und dort die Dateien ablege. Das führt aber zu einem Fehler beim Versuch das Update zu installieren, weil es den Ordner ja schon gibt. Ein schwerwiegender Folgefehler ist, dass das Update nicht zurückgerollt wird und meine Applikation damit nicht mehr lauffähig ist, weil unteranderem die Anwendungsdatei (exe) schon entfernt war.

19.09.2011 - 20:56 Uhr

Hallo Forum,

ich habe eine Applikation, die pro Anwender nur einmal gestartet werden darf. Sprich pro User eine aktive Instanz. Nun kommt die Anforderung hinzu, dass beim Öffnen weiterer mit dieser Applikation verknüpfter Dokumente diese auch in der Applikation geöffnet werden sollen. Ihr kennt das Verhalten von Excel.

Um zu prüfen, ob die Applikation bereits gestartet ist verwende ich den auf CodeProject und hier schon im Forum verlinkten Beitrag (C# Single Instance App With the Ability To Restore From System Tray (Using Mutex).

Dazu muss man in der Main() Methode


if (!SingleInstance.Start())
{
   SingleInstance.ShowFirstInstance();
   return;
}

einfügen.

Meine Idee war es die ProgramInfo Klasse zu erweitern. Allerdings sind die Argumente immer die gleichen und somit ist die Idee wertlos.

Ich denke das ich viel mehr über die überschriebene WndProc Methode und deren Message-Parameter gehen muss.


        protected override void WndProc(ref Message m)
        {
            if (m.Msg == SingleInstance.WM_SHOWFIRSTINSTANCE)
            {
                WinApi.ShowToFront(this.Handle);
            }
            base.WndProc(ref m);
        }

Nur konnte ich nichts finden, was eine Hinweis darauf gibt, in welcher Property die Parameter gespeichert werden.

Hat einer von euch einen Rat?

26.08.2011 - 20:14 Uhr

Meines Wissens nach gibt es OOB nicht die Möglichkeit, da der Windows Installer alle Komponenten der Installation registriert.

Du kannst dir aber eine CustomAction programmieren die diese Aufgabe innerhalb deines Setups durchführt.

06.08.2011 - 19:30 Uhr

Das ist genau das was ich probiert hatte. Ich habe jedoch die Einschränkung das meine Klassen nicht ausgelagert sind. Da dieser Milenstein bis Montag fertig sein muss werde ich das in einem späteren Release gerade ziehen.

Danke aber schon einmal für die Hilfe.

06.08.2011 - 13:34 Uhr

Ich denke gerade darüber nach mir Extension Method zu schreiben, die dann die Wertzuweisungen übernehmen. Eigentlich muss es doch auch anders gehen als so:


public static Service.Contact ToServiceContact(this IContact contact)
{
   return new Service.Contact(){FistName = contact.FirstName,...};
}
06.08.2011 - 13:04 Uhr

Hast du irgendwo ein Link wo das näher beschrieben ist? Ich habe mir mal die Service Reference Konfiguration angesehen und damit etwas rumgespielt. Anschließend ging nichts mehr 8o also wieder alles zurück gestellt. 🙁

06.08.2011 - 12:49 Uhr

Ich meine damit, dass die IContact Objekte die gleichen Properties enthalten wie das Objekt, das der Service erwartet. Beides sind Transferobjekte und haben somit keine von mir erstellten Methoden.

Das Service Objekt würde also auch das IContact Interface implementieren. Allerdings tut es das nicht, weil durch die Serialisierung und durch die Proxy-Generierung vom VisualStudio diese Information verloren geht.

Wie kann ich denn die "inneren" Objekte übergeben, wenn Sie laut Compiler nicht vom gleichen Typ sind - in ihrer Implementierung aber schon? Genau das ist doch mein Problem.

@unconnected: Das habe ich jetzt nicht verstanden.

06.08.2011 - 11:12 Uhr

Hallo Forum,

ich habe folgendes Problem bei einem Plug-In System für Datenimporte.
Die PlugIns implementieren eine Methode public List<IContact> LoadData(string path) die vom PlugIn Host aufgerufen wird um die Daten entgegenzunehmen.

Die Daten müssen dann an einen Webservice weitergegeben werden damit sie zentral gespeichert werden können. Und hier tritt mein Problem auf.

Die Daten vom PlugIn implementieren alle IContact. Die Transferobjekte des Webservice tun dies auch nur wissen sie das auf Grund der Proxy-Klassen nicht.

Wie kann ich - ohne großen Aufwand zu betreiben - die Daten einfach an die Webservice Methode SaveContact(Contact contact) übergeben?

Versucht habe ich es schon so:


Service.SaveContact((Service.Contact) iContactObject);

Hier kann er den Typ jedoch nicht wandeln.


Service.SaveContact(iContactObject as Service.Contact);

Hier kann er den Typ auch nicht wandeln und gibt NULL zurück.

05.08.2011 - 19:45 Uhr

Da ich gerade an der gleichen Problematik arbeite, kann ich dir sagen, dass herbivore Recht hat. Du solltest die referenzierte Interface dll auf false bei Lokale Kopie setzen. Und dein Plug-In muss natürlich auch dein IPlugIn Interface implementieren.

26.05.2011 - 11:47 Uhr

Ich habe nun alle Antworten einmal getestet. Nichts was hilft. Trotz serviceDebug erhalte ich nach wie vor die gleiche Antwort.

Der Service wird im IIS 7 gehostet.

23.05.2011 - 15:16 Uhr

Auch mit Service-Deklaration kommt die gleiche Meldung.


<services>
      <service name="UploadService">
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="LargeFileUpload" name="BasicHttpEndpoint" contract="IUploadService" endpointConfiguration="" />
      </service>
    </services>

23.05.2011 - 14:36 Uhr

Hallo Forum,

ich erstelle mir gerade einen UploadService via WCF. Für Dateien kleiner 65kb funktioniert alles hervorragend. Bei größeren Dateien, wirft er mir jedoch sofort die Meldung:

Fehlermeldung:
Der Remoteserver hat eine unerwartete Antwort zurückgegeben: (400) Bad Request.

Nun habe ich schon danach hier im Forum gesucht und auch einen Beitrag zu gefunden. WCF: Beschränkung bei größe eines http-requests?

Allerdings erscheint immer noch die Meldung.

Meine Client Config sieht wie folgt aus:


<system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IUploadService" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferSize="2147283647" maxBufferPoolSize="2147283647" maxReceivedMessageSize="2147283647"
                    messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                    useDefaultWebProxy="true">
                    <readerQuotas maxDepth="2147283647" maxStringContentLength="2147283647" maxArrayLength="2147283647"
                        maxBytesPerRead="2147283647" maxNameTableCharCount="2147283647" />
                    <security mode="None">
                        <transport clientCredentialType="None" proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="UserName" algorithmSuite="Default" />
                    </security>
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost:50057/FileUploadService.svc"
                binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IUploadService"
                contract="FileUpload.IUploadService" name="BasicHttpBinding_IUploadService" />
        </client>
    </system.serviceModel>

Die Service web.config sieht so aus:


 <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="LargeFileUpload" closeTimeout="00:01:00"
            openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
            allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
            maxBufferSize="2147283647" maxBufferPoolSize="5242889" maxReceivedMessageSize="2147283647"
            messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
            useDefaultWebProxy="true">
          <readerQuotas maxDepth="2147283647" maxStringContentLength="2147283647" maxArrayLength="2147283647"
              maxBytesPerRead="2147283647" maxNameTableCharCount="2147283647" />
          <security mode="None">
            <transport clientCredentialType="None" proxyCredentialType="None"
                realm="" />
            <message clientCredentialType="UserName" algorithmSuite="Default" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- Legen Sie den Wert unten auf "false" fest, um die Veröffentlichung von Metadateninformationen zu vermeiden, und entfernen Sie den Metadatenendpunkt oben vor der Bereitstellung. -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- Damit in Fehlern Ausnahmedetails zum Debuggen angezeigt werden, legen Sie den Wert unten auf "true" fest. Legen Sie ihn vor der Bereitstellung auf "false" fest, um die Veröffentlichung von Ausnahmeinformationen zu vermeiden. -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

Eine Vermutung ist, dass mein "LargeFileBinding" nicht greift. Allerdings wüßte ich auch nicht, wo ich es noch einbinden könnte.

23.03.2011 - 10:56 Uhr

Wenn du mit Inno Setup klar kommst sollte der Bruch im Workflow beim Wechseln der IDE nicht das Problem darstellen. In diesem Fall ist nicht der Weg das Ziel.

23.03.2011 - 10:34 Uhr

Hallo Schuppsl,

grundsätzlich ist das machbar. Ob es mit dem VS-Setup-Projekt geht kann ich dir allerdings nicht sagen, da ich meine Setups mit Wix (Windows Installer XML) erstelle.

Zudem hast du dir da ein nicht gerade leichtes Thema rausgesucht, da der Windows Installer zwei Arten von Paketen verarbeiten kann. Einmal ein Installationspaket (.msi) und einmal ein Patchpaket (.msp). Lies dir dazu am besten mal die MSDN durch.

17.03.2011 - 12:32 Uhr

Ich habe jetzt angefangen es mit einem Helper zu lösen, der mir dann den Status wieder verändert.

17.03.2011 - 11:23 Uhr

Hm. Dann habe ich zwei Fragen.

Wie ändern die genannten Methoden denn meinen Status in der Datenbank? Das können sie meiner Meinung nach nicht. Der User wäre quasi immer angemeldet.

Wie würdest du dann Authentifizierung für einen WCF Service umsetzten? Da das Membership Model dann ja nicht durchgängig nutzbar ist.

17.03.2011 - 10:26 Uhr

Hallo Forum,

für ein Projekt benutze ich einen eigenen Membership Provider für eine DB2 Datenbank. Ich habe mir schon die beiden Provider für MS SQL und MySql angesehen aber kein Antwort auf meine Frage finden können. Mir ist bekannt, dass ich in der ValidateUser-Methode via SQL Befehl den LogOn Status setzen kann. Somit kann ich bestimmen, dass der User angemeldet ist. Aber wo ist das Pendant dazu? Wie oder mit welcher Methode wird der Status wieder zurückgesetzt?

mfg Tequila

17.03.2011 - 09:35 Uhr

Nutzt du das VisualStudio Setup Projekt oder ein anders wie etwa Wix?

03.01.2011 - 19:56 Uhr

Ich danke euch. Eine Menge Informationen die ich mir jetzt mal zugemüte führen werde.

Etwas verunsichert mich jedoch gerade an meinem PlugIn System. Ich versuche wann immer möglich nach den CleanCodeDeveloper Prinzipien zu programmieren. Nun erstelle ich gerade abstrakte Klassen in meiner Interface Assembly um die Klasse meines DataAccess Layers an die PlugIns weitergeben zu können ohne, dass diese meinen DataAccess Layer referenzieren müssen. Irgendwie scheint das nicht gerade dem "Don't repeat yourself"-Prinzip zu entsprechen. Da ich zumindest die Properties alle nocheinmal schreiben muss.

03.01.2011 - 13:30 Uhr

Hast du für diesen Lösungsweg ein Beispiel zur Hand. Mich interessiert besonders die Config Section (Einlesen) und das Auslagern.

03.01.2011 - 11:52 Uhr

Hallo Forum,

ich arbeite gerade an einem PlugIn System um eine meiner Anwendungen mit weniger Aufwand erweitern zu können. Soweit funktioniert nun schon alles. Ich habe nur das Problem, dass ich keine Konfigurationen zu den PlugIns erstellen kann.

Zur Lösung des Problem sind mir zwei Ideen gekommen.

  1. Ich lege zu jedem PlugIn eine App.Config an. Leider klappt das nicht, weil das PlugIn diese nicht lesen kann. Klar, weil das PlugIn imm Kontext meines Hosts läuft.

  2. Das PlugIn muss seine Konfig selbst laden. Im Standardkonstruktor kann ich also xml Deserialisieren. Klingt schonmal nicht schlecht. Vorteil: der Host hat nichts mit der Konfiguration des PlugIns zu tun. Nachteil: Es gibt kein einheitliches System für die Konfiguration.

Wie löst Ihr solche Sachen? Habt Ihr besser Lösungen als meine zweite Idee?

29.12.2010 - 14:09 Uhr

Ich bin gerade am Umbauen. Nur das Hauptobjekt auf teebeasts Vorschlag zu ändern brachte keine spürbare Verbesserung.

29.12.2010 - 10:51 Uhr

Danke für den Link. Darin wird mein Problem gut erklärt. Ich werde mal teebeast Vorschlag implementieren und dann mal schauen.

Wie löst ihr das, wenn mein Objekt noch unter Objekte enthält? Diese werden auch via einem eigenen Select Befehl erstellt. Hier würde ich nur ungern mit einem join im SQL Statement arbeiten, damit ich die Objekterstellung in der Klasse zum Objekt behalte.

29.12.2010 - 09:59 Uhr

Ich habe eine Frage zur Performance bei der Objekt-Erstellung nach folgendem Schema.

Meine Klassen haben eine statische Methode, die ein Objekt erstellt. Einige geben auch Sammlungen von Objekten zurück. Diese Sammlungen fragen nur die Id ab und rufen immer wieder die GetMyObject-Methode auf. Ich versuche damit nach dem DRY-Prinzip zu arbeiten. Nun stelle ich fest, dass das Abrufen der Sammlung recht lange (5-6Sek) dauert obwohl es sich gerade mal um 900 Datensätze in einer MySQL Datenbank handelt.


public static MyObject GetMyObject(int dataBaseObjectId)
{
   var myObject = new MyObject();
   //Datenbankabfragen/ Eigenschaften setzen
   return myObject;
}


public static MyObjectCollection GetMyObjects()
{
   var myObjectCol = new MyObjectCollection();
   //Datenbankabfrageerstellung usw.
   while(reader.read())
   {
      myObjectCol.Add(GetMyObject((int)reader["Id"]));
   }

   return myObjectCol;
}

27.11.2010 - 10:38 Uhr

Hallo Tina,

grundsätzlich kannst du bei den meisten Setup Builder Conditions einbauen. Worauf die prüfen sollen, kannst du dann festlegen. Google wird dir sicherlich dabei helfen die richtige Bedingung für dein Setup-Programm zu finden.

Soweit mir bekannt, ist es nicht möglich aus einem Setup heraus ein weiteres Setup zu startet. Es gibt aber die Möglichkeit mit Bootstrappern benötigte Pakete in dein Setup zu integrieren.

25.11.2010 - 19:47 Uhr

Hallo Forum,

nach langen Diskussionen darf nun doch WCF für die Umsetzung verwendet werden. Ich habe mich heute also mit WCF beschäftigt und ein ersten RESTful Service erstellt. Soweit klappt auch alles. Die Gegenstelle erwartet aber JSON in folgendem Formaten:

{'Status':'ok', 'Data': hier dann die Daten}
{'Status':'error', 'Msg': 'Fehlermeldung'}

Wie kann ich die Rückgabe nun anpassen, wenn ich folgende Service-Methode habe?


School JSONGetSchool(string schoolId)
{
   return School.GetSchool(int.Parse(schoolId));
}

Das Interface ist so deklariert:


[OperationContract]
[WebInvoke(Method = "GET",  ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate="Schools/{schoolId}")]

24.11.2010 - 10:23 Uhr

Hallo Lynix google mal nach vncSharp. Das ist das was du suchst. Mein letzter Stand ist aber, dass dieses Control nicht weiterentwickelt wurde.

23.11.2010 - 00:20 Uhr

Nein ich, bzw. die Gegenstelle konsumiert nicht mit jquery. Mir reicht, wenn die xml-Notation weg ist. Alles was dazwischen steht scheint ja valides json zu sein.

22.11.2010 - 22:42 Uhr

Ich habe es nun ausprobiert. So ganz zu funktionieren scheint es nicht. Zum einen wird mir nun eine "*.json" Datei zum Download angeboten. Und der Inhalt in dieser Datei ist abgeschnitten. Aber grundsätzlich schonmal ohne xml-Notation.

22.11.2010 - 22:13 Uhr

@gfoidl: Leider kann kein WCF verwendet werden, da es sich um ein schon bestehendes Projekt auf .net 3.5 Basis handelt, dass nur weitert werdern soll.

@Abt. ich werde es gleich mal ausprobieren.

22.11.2010 - 18:51 Uhr

Ich glaube du verwechsest da was. Ich rede nicht von einem MVC Projekt, sondern von einem WebService.

Ich habe mir nun das Result noch einmal genauer angesehen.


<?xml version="1.0" encoding="utf-8" ?> 
  <string xmlns="http://www.testdomain.de/Data">[{"Id":1,"Name":"Peter"},{"Id":2,"Name":"Paul"},{"Id":3,"Name":"Steffi"}] 

Problem: Nicht nur die xml Notation ist unerwünscht auch ist dies kein gültiges JSON Objekt.

22.11.2010 - 15:49 Uhr

Hallo Forum,

ich soll einen schon bestehenden asp.net 3.5 WebService (WebDienst Projekt) dazu bewegen valide JSON-Results auf GET und Post Request zurückzugeben.

Ich habe dazu den WebService als ScriptEnabled deklariert. Anschließend habe ich alle Methoden mit dem Attribut[ScriptMethod(ResponseFormat = ResponseFormat.Json)] ausgestattet.

In der Methode serialisiere ich dann das Ergebnis mit


JavaScriptSerializer js = new JavaScriptSerializer();
string strJSON = js.Serialize(peopleCollection);
return strJSON;

Ich bin davon ausgegangen, dass der Service nun valides JSON zurückgibt. Allerdings habe ich nun die Antwort erhalten, dass es eine Mischung aus xml und JSON ist.

Schaue ich mir das Result im Browser an sehe ich folgendes:


[{"Id":1,"Name":"Peter"},{"Id":2,"Name":"Paul"},{"Id":3,"Name":"Steffi"}]

Für mich sieh das nach einem JSON-Array aus. Hattet ihr auch schon einmal diese Anforderung und wo hattet ihr Fallstricke? Wie könnte ich das Problem lösen?

09.11.2010 - 22:34 Uhr

Der Fehler kommt vom WinForm Client. Wie kann ich mit fiddler2 die Verbindung überwachen?

09.11.2010 - 15:18 Uhr

Nach langem probieren komme ich nicht klar. Mein Enum sieht nun so aus, aber die Fehlermeldung bleibt die gleiche.


public enum ExperienceLevel
{
    [System.Xml.Serialization.XmlEnum("Beginner")]
    beginner=1,
    [System.Xml.Serialization.XmlEnum("Advanced")]
    advanced=2,
    [System.Xml.Serialization.XmlEnum("Professional")]
    professional=3,
}

01.11.2010 - 22:09 Uhr

Hallo Forum,

ich habe mal wieder ein Problem mit Enumerationen. In meiner Klasse gibt es eine Enumeration mit folgendem Aufbau:


public enum ExperienceLevel
{
    beginner=1,
    advanced=2,
    professional=3,
}

Die Klasse wird via WebService übergeben. Anschließend erhalte ich:

System.InvalidOperationException: Instanzvalisierungsfehler: '0' ist kein gültiger Wert für MyProject.Enums.ExperienceLevel.

Ich habe darauf hin mal die Werte mit 0 beginnend erstellt. So läuft es. Da ich die Werte nicht einfach verändern darf habe ich nun ein Problem. Wie kann ich es nun hinbekommen, das ich trotzdem mit 1 beginnen kann?

22.10.2010 - 00:00 Uhr

Ich versuche einen String einem Enum Wert zuzuordnen. Mein Enum besteht dabei aus Währungen:


public Enum Currency
{
     FJD,
     EUR = 0,
     FKP,
     GBP,
     GEL,
}

Aus einer Datei lese ich nun die verwendete Wärung aus und versuche in meinem Objekt das Enum entsprechend zu setzen:


private void setCurrency(string currency)
{
     this.Currency = (Currency)Enum.Parse(typeof(Currency), "GEL", true); //currency ist beispielhaft mit "GEL" gelegt
     var test = this.Currency.ToString(); //FJD
}

Egal welche Währung ich wähle, das Ergebnis ist immer FJD. Ich sehe wiedereinmal den Fehler nicht.

21.10.2010 - 16:07 Uhr

Ich habe den Fehler. Der Namespace des zweiten Projekts stimmte mit dem Namen der abstrakten Klasse überein. Bekommt die abstrakte Klasse einen anderen Namen gehts.

21.10.2010 - 15:55 Uhr

ja habe ich. Ich erstelle am We mal eine Solution an der man das Problem nachvollziehen kann.

20.10.2010 - 19:52 Uhr

@Seraph2404: am Zugriff liegt es auch nicht.
@m0rius: Ich verwende lieber die vollen Namespaces als P1.N.C

Ich kann besser mit Beispielen arbeiten daher einmal das was ich habe


public abstract class MyAbstractClass
{
     public abstract string Name { get; set; }
     public abstract bool Save();
     public abstract bool Update();
     public abstract bool Delete();
}

In einer Klasse im selben Projekt wie die abstrakte Klasse funktioniert die Vererbung von dieser. 🤔

20.10.2010 - 17:30 Uhr

Hallo Forum,

ich habe eine abstrakte Klasse in einem Projekt mit dem Namespace Core.
Dieses Projekt wird von einem anderen Projekt mit dem Namespace Core.Administration referenziert.

Im Core.Administration Projekt gibt es eine Klasse, die von der abstrakten Klasse ableiten soll aber ich kann sie dort nicht sehen.

Meine Frage ist daher, geht es, dass abstrakte Klassen in anderen Namespaces verwendet werden? Eigentlich sollte es doch gehen, oder nicht?

01.10.2010 - 11:43 Uhr

Ich verwende keine Events. Ich klicke einfach in die Textbox und drücke Strg + V. Ich habe mir eine zweite Solution erstellt. Und dort funktioniert es noch. Merkwürdig, da auch der direkte Vergleich der Forms-Eigenschaften nichts brachte.

30.09.2010 - 18:10 Uhr

Ich habe eine MDI Form. Öffne ich dort nun eine Child-Form und versuche dort mit Strg + V etwas einzufügen funktioniert dies nicht. Gehe ich über das Kontextmenü der rechten Maustaste so steht dort unteranderem:

Rechts-nach-Links-Lesefolge
Unicode-Steuerzeichen anzeigen
Unicode-Steuerzeichen einfügen
IME starten

Wie kann ich dies wieder auf den Standard umstellen? Der IME Mode steht auf NoControl.

07.09.2010 - 11:34 Uhr

Hallo herbivore,

ein ganz großes Dankeschön. Es funktioniert nun. Diese Hilfe hier ist Gold wert. Wo kann man spenden?

05.09.2010 - 13:45 Uhr

Ich würde an deiner Stelle asp.net mvc verwenden. Du hast mehr Kontrolle über das Markup, sprechende URLs und du bist vom asp WebForms LifeCycle unabhängig.

Schon jetzt kann man überall Diskusionen zum Thema Nischen-Dasein von Silverlight hören. Vorallem wo doch HTML5 schon quasi vor der Tür steht.

04.09.2010 - 22:34 Uhr

Ich bekomme es einfach nicht hin.

Gehe ich den Code nochmal durch kann ich es einfach nicht verstehen.

Die statische Methode soll mir alle Accounts sortiert nach dem Ranking zurückgeben. Quasi gruppieren. Dabei prüfe ich, ob ich diesen Typ schon als Key haben. Ist dem nicht so, wird mit der statischen Methode getAccountTypeAccounts eine AccountCollection zurückgegeben.


public static System.Collections.Generic.SortedList<KontoTyp, Konten> GetAccountsByAccountType(Kunde currentClient)
{
    System.Collections.Generic.SortedList<KontoTyp, Konten> accountList = new SortedList<KontoTyp, Konten>(new AccountTypeByRankingNumberComparer());

    foreach (Kontotyp accountType in currentClient.Konten)
    {
        if(!accountList.ContainsKey(accountType))
        {
//hier wird die SortedList verändert, wenn der Kontotyp noch nicht enthalten ist. Anschließend wird mit getAccountTypeAccounts eine Collection mit allen Konten die diesen Typ habe zurückgegeben.
            accountList.Add(accountType, getAccountTypeAccounts(currentClient.Konten, accountType.Id));
        }
    }

    return accountList;
} 

Die statische Methode getAccountTypeAccounts sieht so aus. Nichts, was den Key der SortedList verändert.


private static AccountCollection getAccountTypeAccounts(accounts, Guid accountTypeId)
{
    AccountCollection accCol = new AccountCollection();

    foreach (Konto item in accounts)
    {
        if (item.KontoTypeId == accountTypeId)
        {
            accCol.Add(item);
        }
    }

    return accCol;
}

Debugge ich nun alles ist das Ergebnis wie folgt:
Durchlauf 1 - Ordnungsnummer: 2
Durchlauf 2 - Odnungsnummer: 1
Durchlauf 2 - Odnungsnummer: 2

Demnach ist der Comparer das Problem. Der wiederrum ist aber eine Standardimplementierung.

04.09.2010 - 07:36 Uhr

Hallo herbivore

Ich habe in den letzten Tagen viel mit dem Comparer ausprobiert und komme trotzdem kein Schritt weiter. Das ist der alte und neue Stand:


public class AccountTypeByRankingNumberComparer : IComparer<AccountType>
    {
        #region IComparer<AccountType> Member

        public int Compare(AccountType x, AccountType y)
        {
            if (x.RankingNumber > y.RankingNumber)
            {
                return 1;
            }
            else
            {
                return -1;
            }
        }

        #endregion
    }

Irgendwie verstehe ich SortedList nicht. Wenn ich einen Comparer mitgebe und auch vergleiche, so muss das SortedList-Objekt doch davon ausgehen, dass sich im internen Index auch was positionsmäßig verändern kann. Oder nicht?

31.08.2010 - 19:45 Uhr

Ich konnte bisher noch nicht in Erfahrung bringen, ob die IComparable Implementierung verloren geht, wenn ich das Objekt per WebService bekomme. Das Basisobjekt hat die Schnittstelle IComparable jedenfalls. Da mein Fehler durch die Konstruktorüberladung bzw. den Comparer auftritt denke ich nun darüber nach mir eine Wrapper-Klasse zu bauen und dort IComparable zu implementieren. Ist das zu kompliziert Gedacht?

30.08.2010 - 12:08 Uhr

Ich habe noch eine Frage. Wie kann ich die Sortierung bzw. nach welcher Property im Key-Objekt sortiert werden soll bei einer SortedList beeinflussen? Mein AccountTypeRankingNumberComparer verändert ja nunmal die Position des Keys, was zu meinem Problem führt. Wenn ich nun aber keinen Comparer angeben, wo nach sortiert er mir dann? Wahrscheinlich nach dem ganzen Key, oder?