Laden...

Forenbeiträge von Rabban Ingesamt 106 Beiträge

26.03.2012 - 15:40 Uhr

Nutzt du Wcf? Wenn ja dann kannst du das relativ einfach in 2 verschiedene Messages packen. Eine für die Datei und eine für den Text, die Datei kannst du dann auch als Stream übertragen. Damit sparst du dir den Overhead das es in den Speicher geladen werden muss.
Das ganze würde dann in etwa so aussehen:


    [MessageContract]
    public class FileTransferMessage
    {
        [MessageHeader(MustUnderstand = true)]
        public string FileName { get; set; }

        [MessageBodyMember(Order = 1)]
        public Stream DataStream { get; set; }

    }

eine ähnliche Message kannst du dann für den Text verwenden, nur anstatt den Stream beinhaltet diese dann einen String.

Wenn der Service dann noch als:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple)]

definiert ist, sollte das ganze Problemlos klappen, du solltest den InstanceContextMode auch problemlos als PerSession laufen lassen können, wenn du das benötigst.

MfG
Rabban

17.08.2011 - 19:39 Uhr

Danke für eure Hilfe, jetzt hab ich wenigstens einen Ansatzpunkt mit dem ich weiterarbeiten kann 😉

MfG
Rabban

17.08.2011 - 18:37 Uhr

Du könntest auch einfach eine abstrakte Methode/Property verwenden.

Kann ich leider nicht, da eine abstrakte Methode an eine Instanz gebunden ist, sie sollte aber statisch sein.

Ansonsten bitte auch das berücksichtigen: Mapper

der Begriff O/R-Mapper ist mir neu, da werd ich mich wohl erstmal reinlesen müssen.
Fowler hat mehrere Bücher geschrieben, welche davon meinst du?

MfG
Rabban

17.08.2011 - 17:45 Uhr

Die Idee dahinter ist, das die Klasse Search eine Datenbanksuche darstellen soll. Search holt sich von T.getString() (in dem fall würde es nicht getString sondern TableName heissen) den Tabellennamen und baut sich daraus einen SQL Select befehl, der nichts weiter tun soll, als die PrimaryKeys zurückzugeben. Anschliessend wollte ich über die PrimaryKeys die Instanzen von T erstellen. Damit ich abschliessend ein Array von T habe.


T obj = new T();
obj.load(primaryKey);

Wenn ich hier richtig liege, was spricht gegen typeof(T).FullName (wenn du nicht grade alle paar Wochen deine Klassen/Namespaces umbenennst)?

Die namen würde sich zwar nicht ändern, aber dann müsste Search den Tabellennamen von jeder Klasse wissen. Und das wollte ich ja eigentlich vermeiden.

17.08.2011 - 17:04 Uhr

Was genau meinst du damit? Was bekommst du übergeben? Woran kannst du erkennen oder entscheiden, die Methode welcher Klasse aufgerufen werden soll?

Ich habe eine abstrakte Basisklasse, von der ich mehrere verschiedene Klassen ableite.

Nun habe ich eine Klasse(Search), der ich generisch eine andere Klasse übergeben kann:


class Search<T> : where T : BaseClass, new()
    {
        public void search()
        {
                //BaseClass methode aufrufen
                string s = T.getString();
        }
    }

ich hab das unwesentliche mal rausgekürzt.
Wie hier zu sehen, wird vorrausgesetzt das T BaseClass bzw. ein Kind davon ist. Somit habe ich zugriff auf alle benötigten Methoden von BaseClass, bzw. die dynamisch gebundenen der Kindklasse. Bis hierhin ist alles richtig und gewollt.

Nun muss mir aber jede Kindklasse einen bestimmten Individuellen String zurückgeben, der nur auf die Klasse zutrifft. Das heisst, dieser String ist für die Klasse immer gleich und kann (bzw. es wäre wünschenswert) statisch sein.
Also:


string s = T.getString();

Ich hätte zwar die möglichkeit von T eine Instanz zu erstellen, dazu müsste ich aber in jeder Kindklasse einen DummyKonstruktor definieren um ein leeres Objekt zu erzeugen. Dies ist aber nicht wirklich in meinem Sinne.

Ich hoffe ich habe mich halbwegs verständlich ausgedrückt 😉
Mittlerweile habe ich aber immer mehr das Gefühl, das ich wohl gesamt einen falschen Weg beschritten habe um das Problem zu lösen.

MfG
Rabban

17.08.2011 - 16:21 Uhr

Hallo Gemeinde,

ich habe ein Problem eine statische Methode polymorph an die Kindklassen abzuleiten.
In csharp scheint dies leider nicht möglich zu sein.

Aufgabensetzung hierbei ist:
Die Elternklasse muss eine statische Methode bereitstellen die einen String zurückgibt, die gleiche Methode müssen auch die abgeleiten Kindklassen implementieren, da ich zur Laufzeit nur die Elternklasse entgegen nehmen kann und ich hoffte die Methode Polymorph nutzen zu können.

Ich habs auch mit einer Konstante versucht (da für mich nur entsheidend ist das ich an den String komme, muss es nicht zwangsläufig eine Methode sein, wichtig ist nur das ich statisch drauf zugreifen kann), aber die kann ich auch nicht überschreiben, nur mit new überdecken, aber dann hätte ich wieder kein Polymorphes verhalten.

Habt ihr einen Vorschlag oder Denkanstoß wie ich dieses verhalten trotzdem erzeugen kann?

MfG
Rabban