Laden...

Forenbeiträge von Raptor 2101 Ingesamt 119 Beiträge

08.09.2009 - 19:58 Uhr

Ich hab mich in der letzten Zeit etwas intensiver mit der Fotografie auseinander gesetzt. Leider fehlte mir eine Möglichkeit Bilder wie bei Flickr oder anderen Diensten als eine "GeoGalerie" anzeigen zu lassen. Zudem fehlten mir meist liebgewonnene Funktionen.

Hier hab ich mal meinen ersten entwurf einer GeoGallery in ASP

Das Package enthällt folgende dinge:
XMP Daten aus Bildern extrahieren.
GPX daten lasen (wenn auch noch sehr stümperhaft)
Darstellung über GoogleMaps
Tagverarbeitung

Das ganze ist 100&% Mono-kompatibel.

eine "live"-Demo ist hier zu finden: http://raptor2101.dyndns.org/GalleryTest
Die sources gibt es hier (PreBeta statius 😉 ): http://blog.raptor2101.de/wp-content/uploads/2009/09/Preview.rar

Fragen und Anregungen nehm ich gern entgegen.

24.08.2009 - 13:37 Uhr

Wie schreibt man denn seinen eigenen Webserver und wozu?

"Warum hat man seinen eigenen DNS-Server?"
"Warum baut man sein eigenes GPRS-Netz?"
"Warum schreibt man sein eigenes Betriebssystem?"

  1. Lerneffekt!
  2. Spaß!
  3. Weil man es kann!
24.08.2009 - 13:32 Uhr

Ich würde variante 3 bevorzugen.

Das .Net Framework liefert dir für solche Probleme aber auch noch nettere Helferlein.

Monitor, Semaphore, usw...

24.08.2009 - 13:29 Uhr

Flash kann man "daten" übergaben.

einfach im entsprechenden Objekt als query string mitgeben

zb: fooBar.swf?foo=Bar&foobar=furchtbar

die beiden variablen stehen dir dann in der ROOT-Ebene als normale Variablen zur verfügung.

Größere Datenmengen solltes du aber mittels eigenem Handler und XML/JSON am normalen ASP-Seitenscript vorbeischleusen

So ganz hab ich deine "Vision" von OO(OpenOffice?) und MasterPage nicht verstanden.

Aber Prinzipjell hat jede WebPage ein Member namens Master. Ist der WebPage ein MasterFile zugeordnet findest du dort die Referenz. Nach einem Cast auf deine Spezielle implementierung hast du zugriff auf die dortigen Methoden und Variablen.

Mach dich aber vorher mit dem Lebenszyklus einer ASP Seite vertraut. Besonders wann eine MasterPage gerendert/verarbeitet wird. Ich hab mir angewöhn in die Masterpage nur diche zu knallen die der Darstellung dienen. Sicherheits & Verarbeitungslogig wird in eine eigene Klasse gepackt von der dann jede WebPage abgeleitet wird.

Zum Thema-Datenbanken: Das klingt alles sehr wüßt formulier deinen Gedanken da doch mal etwas konkreter. Aber schonmal eins: du wirst wenige Anbieter finden die dir unendlich viele Datenbanken zur verfügung stellen. Was auch schwachsinn ist. Bedenke immer jede Datenbank hat ihre eigenen Transaction.logs, Backups usw. Ich würd da lieber eine Datenbank machen aus der alle leben. Will ich wirklich einen Trunk, klone ich mir diese eine Datenbank und schmeiße alle Daten die ich nicht brauche raus. Das ist mir alle male lieber als bei jeder zweiten anfrage daten zu mergen.

24.08.2009 - 13:15 Uhr

Nochmal die Frage, wie soll die Runtime-Umgebung erkennen ob eine Exception von dir erzeugt oder ob sie durch einen Programmierfehler verursacht wurde?

in der Global.asax bekommst du "kurz" vor der "rückmeldung" nochmal die möglichkeit, die geworfene Exception zu "behandeln" bzw zu filtern. Das ist aber

22.08.2009 - 18:01 Uhr

Das nimmt den ganzen schon ein bisschen schmerz 😉

22.08.2009 - 17:28 Uhr

Ich entwickle mir gerade eigene kleine WebControls die stark auf AJAX setzten. Ergo ist viel JavaScript "gefrickel" dabei.

Nun ist meine "Erfahrung", dass der JS-Editor von VS alles andere als "hilfreich" ist.Mal abgesehen von seinen komischen Fomratierungsvorstellungen gitb es kaum IntelliSense (besonders wenn man externe JS-Libs einbindet)

gibt es da ein gescheitet PLugin oder Erweiterung (gerne auch kostenpflichtig).

Bevor es hier genannt wird. Auf meiner Linux hab ich Eclipse&Aptana am laufen. Das funzt super und ist (fast) das was ich suche blos hab ich blos keine lust ständig zwischen den IDEs hin und her zu switchen (besonders beim debuggen)

14.08.2009 - 11:17 Uhr

Ob der wechsel auf WebControl hat das Problem gelöst. So wirklich durchsteigen kann ich aber immer noch nicht, welches Magic MS da im Hintergrund wieder treibt 😉

13.08.2009 - 21:08 Uhr

ja sonst würde die ganze control nicht funktionieren
ich nur irgendwie das gefühl das er nicht weiß wohin der den "MapType" ordnen soll

13.08.2009 - 18:47 Uhr

Hallo Community ich hab ein kleines problem, bei dem ich auf dem schlauch stehe. Ich entwickle mir gerade eine CUstomControl für GoogleMaps. Dieses soll, für einfaches deployment, in eine externe Library ausgelagert werden. So weit so gut.

Hier mal der Beispielcode


public enum MapType
  {
    /// <summary>
    /// Stellt eine Straßenkarte dar
    /// </summary>
    Topografphic = 0,
    
    /// <summary>
    /// Stellt eine Karte mittels Satellitenbildern und Luftaufnahmen dar.
    /// </summary>
    Satellite = 1,

    /// <summary>
    /// Ein Mix aus Straßenkarte und Satellitenbildern.
    /// </summary>
    Hybrid = 2,

    /// <summary>
    /// Kiene beschreibung.
    /// </summary>
    Physical = 3
  }
public class GoogleMapControl : Control
  {
    #region Public Propertys

    public string ApiCode { get; set; }

    [Bindable(true), Description("Legt die Höhe der Karte Fest")]
    public Unit Height { get; set; }

    [Bindable(true), Description("Legt die Breite der Karte Fest")]
    public Unit Width { get; set; }

    [Bindable(true), Description("Legt den zu verwndenden MapType fest.")]
    public MapType MapType { get; set; }
}

Erzeuge ich diese File inneherhalb meines Webprojektes und binde dann mittels folgenden ASPx code alles ein, funktioniert alles wunderbar.


<ext:GoogleMapControl ID="mapControl" runat="server" Height="800" Width="800"  MapType="Hybrid" />

lager ich das custom control aber in eine externe library aus, kann ich den MapType nicht mehr über den designercode zuweisen. Im code beheind funktioniert alles, lass ich ihn weg klappt auch alles. Nur wenn ich das ganze wie oben geschriben ausführe kommt folgende Fehlermeldung:
CS1061: "System.Web.UI.ControlCollection" enthält keine Definition für "MapType", und es konnte keine Erweiterungsmethode "MapType" gefunden werden, die ein erstes Argument vom Typ "System.Web.UI.ControlCollection" akzeptiert (Fehlt eine Using-Direktive oder ein Assemblyverweis?).

lass ich den Parameter weg (und nur den) funktioniert wie gesagt alles und ich bekomme ien GoogleMap angezeigt. Ich steh so ein bisschen auf dem schlauch...

28.04.2009 - 12:13 Uhr

Bei diesem "Geschäfftsprozess" leider schon, fast jedes lesen führt kurz darauf zu einer veränderung

27.04.2009 - 10:15 Uhr

Danke für den Tipp:

Statistiken werden Täglich rebuildet, was aber nicht viel bringt, da sich die datenbestände ständig und schnell ändern.

das mit dem Indexoptimierungs-Assistenten haben wir schon ausprobiert, dann indezieren wir bis zu 12 attribute (zzusaätzlich zu den keys), das würde das problem beheben, aber performant ist das ganze dann nicht mehr...

23.04.2009 - 10:04 Uhr

verwendetes Datenbanksystem: SQL 2005 alle aktuellen Patches (spielt aber keine rolle, da es auf fast allen sql 2005 instanzen nachzustellen ist)

Ich verspreche gleich am Anfang, dass ich der reißererischen Überschrifft Fakten folgen lasse, aber erstmal eine Umgebungsbeschreibung.

Es geht um einen simplen select in der folgenden Form


  SELECT TOP 1 [someatributes]
     FROM [a]
     INNER JOIN [b] ON (b.foreign = a.primary)
     INNER JOIN [c] ON (c.foreign = b.primary)
     INNER JOIN [d] ON (d.foreign = c.primary)
   WHERE [some constraints)

man kann diskutieren ob ein Join über so "viele" tabellen sinnvoll ist, aber der dahinter leigende physikalische ablauf wurde uns vorgegeben und steht seitens des kunden nicht zur debatte.

von der treffermenge her kann man sagen dass C und D die meisten "Treffer" haben (>10000) und über a und b auf wenige (<100) reduziert werden.
Sowohl im SELECT als auch in der WHERE-Clause werden nicht indizierte werte abgefragt.

In der WHERE-Clause erfolgt der zusätzlich ein aufruf einer Scalar-Funktion die im prinzip folgendes macht:


SELECT x,y,z FROM [d] WHERE primary = [somevalue]
IF (x = [] AND y=[] AND z=[]) return true
ELSE return false

Die Randbedingunen:

Dieser select läuft in einer Produktiven anlage mit massig daten in 80% der fälle in unter 100ms durch... in 5% der fälle braucht es 5-10 sekunden in den restlichen 15 bricht der Server mit Timeout ab...

Man kann sich vorstellen das wir (das team in dem ich arbeite) doch einige zeit an diesem Rätsel zu knuppern hatten, denn dieser Select war lange zeit nicht auf unserer "Zielliste"

Gestern hatten wir nun das glück eine Dump der anlage abzuziehen auf der dieser Select Probleme macht. Die Testdatenbank läuft isoliert und ich war nur mit dem Management Studio drauf.

Das Problem:
In der Where-Clause befindet sich unter anderem folgender Ausdruck


  d.Attribute=[NUMBER]

für number setzte ich im Test 6 Werten (Numerische Zahlen) ein (U V W X Y Z). Im Falle von U-Y lieferte der Select innerhalb 10-50ms ein Ergebniss. Bei Z brach der Server nach rund 30 Minuten und auf 20GB hochgeschossener TempDB mit der Meldung ab, er habe nicht mehr genügend Platz um die Anfrage auszuführen....

im ersten schritt entfernte ich die Skalar-Funktion. Mit durchschlagendem Erfolg: der Select lief in ca 10 sek durch... nun sind 10 Sek gegenüber 30 Min zwar wahnsinn, aber immer noch um den Faktor 1000 langsamer als im "normalfall"

ein blick auf den exekution-plan brachte auch schnell licht ins dunkel.

Führ mal alle 6 Test nochmal aus (ohne skalar-funktion) sieht man, dass im falle U-Y das DB-System getreu unserer erwartung erst die Tabellen mit den wenigsten Treffern "joint" (a und b) und dann auf die "großen" Treffermengen losgeht (c und d). Anschließend führt er die komplexeren Filter aus.

Bei Z wurde ich stuzig: hier geht er den weg genau anders rum. Es wird zuerst D und c im Cross gejoint und erst dann versucht zu filtern... Der joinerfolgt dabi auch im NestedLoop (wie bei U-Y auch), das spiel setzt sich dann mit B und zum schluss A fort. Erst ganz am schluss wird die Treffermenge dann erheblich reduziert... Das der Select dann "ewig" braucht ist einleutend.

Es erklärt aber immer noch nicht warum die Skalar-Funktion den Server abschießt...

also das Skalar wieder rein und das Top mal raus... um zu sehen was die selects denn für gesamt Treffermengen liefern. Plötzlich liefern alle selects binnen 10ms Treffer im berech 50-100 Rows....

schaut man sich den ExecutionPlan an, sieht er jetzt auch noch ein ticken besser aus. Stat vorher 5 NestedLoops und unterscheidlicher Abfragereinfolge werden nun nur noch 3 HashMaps gebildet und das unabhängig von U-Z...

man kann mittels Select options auch beim TOP1 hash - Joins erzwingen... und so den Befehl immer "optimal" ausführen lassen


option (optimize for (@attribute = Value)/*, keepfixed plan*/)
option (hash join)
option (merge join)
option (loop join)

SELECT TOP 1 [someatributes]
     FROM [a]
     INNER JOIN [b] ON (b.foreign = a.primary)
     INNER JOIN [c] ON (c.foreign = b.primary)
     INNER JOIN [d] ON (d.foreign = c.primary)
   WHERE [some constraints)
  OPTION (hash join)

was mich nun aber verwundert, was macht TOP 1 das es den normalen ExecutionPlan so zerschießt, dass das DB-System nur noch Cross-Joins durchführt?

wie es scheint sind wir nicht die einzigen mit dem problem eine kleine Google suche fand ähnliche Probleme, aber selsten antworten auf das warum...

14.02.2009 - 15:55 Uhr

Ok Fehler gefunden, die Projectionsmatrix (DirectX.Device.Transform.Projection) ist mit komischen werden vorbesetzt... wenn man sie richtig initialisiert (1,1,-2,2) werden die objekte koreckt dargestellt...

14.02.2009 - 15:35 Uhr

erstmal danke das du dich für diesen post angemeldet hast. Cull.None bringt mir hier nichts, da nichtmal die eine seite richtig dargestellt wird ... (ich beachte wierum ich die Vertices angebe...)

das mit den Winkelangaben in Boogenmaß weiß ich, ich Konvertiere alles 😉

4 statt 3 vertices-> ich weiß, ich stell ja nicht nur ein dreieck dar, das ist ein Testbild...

hier mal das Problem mit meinem eigendlichen Problem... Bild1
Hier ist eine normale Darstellung zu sehen. Die Texte sind über sprites gelöst, die Linien über LineStrips. Das ganze befindet sich in der X/Y Ebene mit Koordinaten im sin(angle)*r|cos(angle)*r- Bereich (kreise halt ^^) soweit alles palettie funktioniert auch prima und ich hab SUPER Frameraten (G der muste sein)

Solange ich die Szene um die Z achse rotere (kreis rechts/links drehen) ist auch noch alles OK

nur bei Drehungen um X|y wirds kritisch: Bild2
Hier wurde das bild um die X Achse gekippt. Wie zu sehen ist werden die sprites korreckt angeordnet (über vector3.Project). Aber die Lines werden Gecutet. und das auch irgendwie unsinnig...

13.02.2009 - 20:17 Uhr

Hier erstmal 2 bilder die das problem zeigen (Bilderer im anhang)

da wird ein dreieck um die x achse rotiert anstatt es korrekt darzustellen wird es jedoch zercuttet...

Normalerweise sollte es unter dem X Strahl weiter gehen
beim ersten render ist alles ok, sobald man das dreieck aber nur um ein "my" rtiert falckert es wild rumm...

init-Code


DisplayMode displayMode = Manager.Adapters[Manager.Adapters.Default.Adapter].CurrentDisplayMode;
        var pps = new PresentParameters
                    {
                      Windowed = true,
                      SwapEffect = SwapEffect.Discard,
                      EnableAutoDepthStencil = true,
                      AutoDepthStencilFormat = DepthFormat.D16,
                      PresentationInterval = PresentInterval.Default,
                      BackBufferFormat = displayMode.Format,
                      DeviceWindow = drawingContext,
                      DeviceWindowHandle = drawingContext.Handle
                    };
        device = new Device(Manager.Adapters.Default.Adapter, DeviceType.Hardware, drawingContext,
                            CreateFlags.SoftwareVertexProcessing, pps);

RenderState


        device.Clear(ClearFlags.Target|ClearFlags.ZBuffer, backgroundColor, 1.0f, 0);
        device.RenderState.CullMode = Cull.Clockwise;
        device.RenderState.Clipping = false;
        device.RenderState.DitherEnable = true;
        device.RenderState.StencilEnable = true;
        device.RenderState.AlphaBlendEnable = true;
        device.RenderState.SourceBlend = Blend.SourceAlpha;
        device.RenderState.DestinationBlend = Blend.DestinationAlpha;

        device.RenderState.Lighting = false;
        device.RenderState.ZBufferEnable = true;
        device.RenderState.ZBufferWriteEnable = true;


var triangle = new CustomVertex.PositionColored[4];
      triangle[0] = new CustomVertex.PositionColored { Position = new Vector3(0.2f, 0.2f, -0f), Color = Color.White.ToArgb() };
      triangle[1] = new CustomVertex.PositionColored { Position = new Vector3(0.2f, -0.2f, -0f), Color = Color.White.ToArgb() };
      triangle[2] = new CustomVertex.PositionColored { Position = new Vector3(-0.2f, 0.2f, -0f), Color = Color.White.ToArgb() };
      device.VertexFormat = CustomVertex.PositionColored.Format;
      device.DrawUserPrimitives(PrimitiveType.TriangleList, 1, triangle);

jemand eine idee....?

22.01.2009 - 21:56 Uhr

Hallo liebe gemeinde

Wie aus der Topic zu entnehmen ist geht es um LinqToSql welches in einer ASP seite benutzt wird.

Der Benutzer ist dabei in der Lage eine etwas größere Entität zu bearbeiten welche einige 1:n beziehungen intus hat.

Da ich ihm unmöglich eine standart Listverarbeiung vor den Latz knallen kann, bekommt er eine entsprechende komplexere Oberfläche angezeigt. Bei der Bearbeitung bedarf es daher einiger Postbacks...

um die Änderungen/Eingaben zu persistieren will ich (der einfachheit halber) die Entität selber nutzen ...

zu diesem zweck hab ich mir nen kleinen Extender für den DataContext geschrieben...


public static class SerializerExtender
    {
        public static String Serialize(this System.Data.Linq.DataContext context, object element)
        {

            DataContractSerializer dcs = new DataContractSerializer(element.GetType());
            StringBuilder sb = new StringBuilder();
            XmlWriter writer = XmlWriter.Create(sb);
            if (writer != null)
            {
                dcs.WriteObject(writer, element);
                writer.Close();
            }
            return sb.ToString();
        }
        public static T Deserialize<T>(this System.Data.Linq.DataContext context,String data) where T : class
        {
            DataContractSerializer dcs = new DataContractSerializer(typeof(T));
            XmlReader reader = XmlReader.Create(new StringReader(data));
            return dcs.ReadObject(reader) as T;
        }
    }

damit kann ich eine X-Beliebe entität (De)Serialisieren

auf der Seite nutzt ich dann eine Property für den Entität


private TrainingSession TrainingSession
        {
            get
            {
                if (tempSession == null)
                {
                    tempSession = context.Deserialize<TrainingSession>(Session["TrainingSession"] as String);
                }
                return tempSession;
            }
            set
            {
                Session["TrainingSession"] = context.Serialize(value);
            }
        }

sobald der nutzter seine änderungen einspielt bin ich gezwungen die "ursprüngliche" entität aus den DataContext zu löschen und anschließend die geänderte version wieder einzuspielen...


if(context.TrainingSession.Any(x=>x.TrainingSessionID==TrainingSession.TrainingSessionID))
                {
                    TrainingSession session =
                        context.TrainingSession.Single(x => x.TrainingSessionID == TrainingSession.TrainingSessionID);
                    context.TrainingSession.DeleteOnSubmit(session);
                    context.SubmitChanges();
                    context.TrainingSession.Attach(TrainingSession,session);
                    context.SubmitChanges();
                }
                else
                {
                    context.TrainingSession.InsertOnSubmit(TrainingSession);
                    context.SubmitChanges();
                }

besonders über letzten codeblock bin ich alles andere als glücklich. Gibt es eine bessere möglichkeit eine entität zeitweise zu "detachen" zu bearbeiten und wieder einzuklinken ?

04.11.2008 - 10:20 Uhr

kommt eure Applikation mit einem neustart des servers klar (im laufenden betrieb) falls nein würd ich mal vermert in das eventlog schauen, standartmäßig wird der workerprozess des IIS alle 29 stunden neu gestartet, damit gehen zb alle InProc - SessionElemente verloren ...

04.11.2008 - 09:54 Uhr

in dem thread steht doch schon deine antwort...

@DavidT: das stimmt so nicht, die ReturnTypes (var) sind zur entwicklungszeit bekannt. der variablen typ var ist Typesafe, ist nur "CodeSugger" für "mir doch egal was für ein datentyp, mach halt..."

damit ist auch dein Problem ad Adsurdum gefürt. Wenn du eine LINQ abfrage abschießt musst du vorher wissen was für einen datentyp du bekommt oder du arbeitest mit object...

codebeispiel...


object dataSource={Über reflection vom DataContext holen... zb DataSource.Entity1}
type datenTyp={genericType von dataSource auslesen}
object objecte=FROM t in dataSource
                      SELECT t


die geklammerten ausdrücke dürften durch code im 5-10zeiler bereich werden + diverse Try Catch Blöcke...

LINQ wurde gemacht um dir bei statischen Abfragen Support durch die Entwicklungsumgebung zu geben und alle vorzüge aus beiden welten (Einfache abfragesyntax, typesafe...)

für dynamische abfragen (im bezug auf die datenquelle) ist es einfach sinnfrei sowas zu benutzen...

03.11.2008 - 10:02 Uhr

ganz so trivial wie du dir das vorstellst wird das nicht

erstens brauchst du EntityKlassen, die sind "statisch", bzw müssten zur laufzeit über eine assembly eingeladen werden / oder genereriert werden.

Das Mapping kann dyamisch geladen werden...

die abfrage wie du es willst würde dann über Reflection laufen...

jedoch frag ich mich, welchen sinn LINQ dann macht? Da bist du mit nem alten SqlCommand (Text/SP) wesentlich schneller...

27.10.2008 - 13:07 Uhr

Ähm ich rate jetzt mal das du LINQ to SQL benutzt (es gibt noch andere LINQ Provider)

prüf mal ob deine Object/Entität Kunde Modifies und Adds erlaubt

23.10.2008 - 13:27 Uhr

den header auf das protokoll überprüfen und sofot auf https redirecten?

23.10.2008 - 10:39 Uhr

also ich portiere gerade eine PHP/MySQL project auf MSSQL und ASP.NET

stand also vor dem gleichen Problem wie du und kann dir sagen, du wirst noch viel spaß haben

jeh nach verwendeten Datentypen kannst du umconvertieren (zb UInt und Int usw)

ich hab das bei mir so gelöst, dass es eine Klasse gibt die, das dataset enthält.

einer CopyKlasse werden Ziel und Quelle übergeben + einem Converter

dieser convertiert auf row-granularität. so kannst du dann ohne probleme mappen (auch wenn sich zb die spaltennahmen ändern...)

23.10.2008 - 10:22 Uhr

Für das auswählen der Datensätze (falls du mehr als die Treffermenge anzeigst) musst du das OnRowDataBound Event registrieren.

Dieses Event liefert dir die Zeile (Datenelement) die gerade gebunden wird, wenn du in der SQL abfrage eine spallte zurück lieferst (zb 'Treffer') kannst du in dieser methode das einfärben vornehmen...

22.10.2008 - 13:23 Uhr

ich geh mal davon aus das du mit ASP.NET ≥ 2.0 arbeitest

das problem ist der Select .. du schießt den ab lädst deine XXk daten und übergibst diese dann deiner GridView die davon nur wieviele anzeigt 10, 20 ,30? Dank paging...

der nutzer muss nicht wissen das du die XXk daten nicht lädst, lass ihn doch in dem glauben

du hast nun zwei möglichkeiten:

du programmierst dir ein paging selber...
soll heißen, finde raus wieviele daten deine Tabelle hat, wieviele angezeigt werden und selectiere nur die, die auch angezeigt werden können. bei einem klick auf einen weiter button, werden halt die nächsten 1000 datensätzte geladen und angezeigt...

möglichkeit zwei (finde ich persöhnlich besser, da weniger aufwand)
jeh nachdem was du nutzten darfst schau dir mal die EntityDataSource oder die ObjectDataSource an. Beide kannst du so einstellen, dass sie Paging unterstützen, so übernimmt die ganze lästige arbeit das GridView und die DataSource...

ich empfehle die objectdatasource ist für den anfang einfacher zu programmieren...

22.10.2008 - 11:11 Uhr

auf deinen zweiten post kann ich dir antworten: Nein

wenn du auf eine datenbank zugreifst dann bei "foreach(var pe in result)" weil erst da der expressionTree ausgewertet wird

und auch dann kommt es drauf an was für einen DataProvider du benutzt.

benutzt du LinqToSql greifst du nicht direkt in die Datenbank (es wird kein TSQL abgesetzt). da der LinqToSql provider cached. Hat er die daten schonmal geladen, setzt er keine zweite abfrage ab... ob sich das auch bei der CE edition so verhält... ka
benutzt du das EntityFrameWork obliegt es deiner einstellung ob und wann du auf die DB zugreifst...

benutzt du LinqToObject ist das ganze obsolet... 😉

22.10.2008 - 11:00 Uhr

Aus welcher Datenbank beziehst du denn die daten ?

mit ein paar tricks kannst du über das paging die ladezeiten auf ein erträgliches maß drücken ohne das der anwender etwas merkt...

oder anders poste mal code 😁

22.10.2008 - 10:48 Uhr

Der Dreamweaver hat so einen validator intus wie W3C conform der ist, sei dabei jetzt aber in den raum gestellt...
Visual Studio 2008 verfügt mittlerweile auch über so einen (sieht aus wie ein blauer Smily)

VisualStudio "zwinkt" doch automatisch zu standart konformen code (das 2008er) in dem jede nicht conformität anmeckert...

21.10.2008 - 22:05 Uhr

naja sagen wir es mal so, ich versteh warum du gleich ein array parametrieren willst...

mein beispiel


<usercontrol .... myProperty="Hallo;du;schöne;Welt" />


irgendwo in der usercontrol...
String array[]=myProperty.Split(';');


wen du nix komplexes machst reicht das

21.10.2008 - 22:02 Uhr

Der Dreamweaver hat so einen validator intus wie W3C conform der ist, sei dabei jetzt aber in den raum gestellt...

21.10.2008 - 21:58 Uhr

unter .Net 3.5 entweder über LinqToObject oder LinqToXml über die ExtensionMethod .Take()

Beispiel


List<Foo> bar=new List<Foo>();
//do some magic to fill list
Foo foo=bar.Take(10).Skip(9).First();
Console.Out.WriteLine(foo);

solche elemente kannst du auch als datasource nutzen...

21.10.2008 - 21:54 Uhr

noch einfacher geht es mit LinqToXsd

auch wenns ne alpha ist, funktioniert bei mir prima...

21.10.2008 - 21:50 Uhr

Hi,

das dachte ich auch, aber die vorgabe an die ich mich halten muss ist nun mal so.
Muss eben das beste daraus machen.

übrigens der tipp mit den filtern war super.

Tina

jetzt blick ichs nicht mehr, was denn nu, darfst du filtern oder nicht 😁

21.10.2008 - 13:22 Uhr

werte durch ';' getrennt und dann ein split drauf loslassen?

was willste den übergeben, komplexe arrays über xml?

21.10.2008 - 10:28 Uhr

poste mal die stelle wo du den JavaScript code in den asp code bettest ...

21.10.2008 - 09:00 Uhr

Es klinkgt vieleicht etwas plakativ und von oben herrab aber schonmal was von dem wort Filter gehört?

83T Datensätze? welche davon werden benötigt und welche nicht ?

über filter kannst du auch einzelne zeilen löschen... das ist wesentlich performanter nur 40 Datensätzte zu laden als 100 und dann 60 zu löschen...

18.10.2008 - 21:00 Uhr

Normalerweise benutzt der IIS (ich gehe davon aus das du deine ASP anwendung nicht ima Apacha/Mono hostest) den von dir angegebenen user (zu finden unter den einstellungen der Webseite unter verzeichnissschutz
die sollte jeh nach bedarf lese und schreibrechte(bei fileupload) haben

für ganz paranoide (so wie mich) sind hier die tools aus der sysinternal suite (kostenlos) sehr hilfreich... besonders der filemon... damit kannst du tracken wohin der IIS greifen will und wo er eine ACCESS DENIED bekommt. Ist ganz nützlich, da bei einigen handlungen in den systemordner zugriff genommen wird...

17.10.2008 - 16:27 Uhr

mach doch mal was ganz simples

les ein bild ein und speichere es ohne es zu versenden lokal

da du TCP nutzt ist ein verlust von bytes beim transport ausgeschlossen (deswegen fragte ich) daher würd ich wetten dass du das bild falsch versendet wird

check mal CaptureScreenToFile und ReadAllBytes...

17.10.2008 - 09:23 Uhr

was mich interessieren würde, welches protokaoll verwendest du?
UDP oder TCP?

16.10.2008 - 09:40 Uhr

@Browser / verbindung wählen: beließ dich nochmal zum thema IP...

jeh nachdem welche art der adresse du nutzt (DNS,IP) wird entweder der primäre DNS server angesprochen oder die ip direkt...

da der DNS-Server mit einer IP hinterlegt ist, nutzt der Browser immer IPs. Das betriebsystem entscheidet dann über den default-Gateway oder direkt hinterlegter Route auf welchem interface der request abgeschossen wird...

04.10.2008 - 09:41 Uhr

kleiner tipp: check mal was du in der ASPX an headerdaten mitschickst. Ist blöd wenn du ihm zb sagst es kommt ne html und jagst dan SVG/xml raus

beim speichern / neuladen geht dieser header verloren und dein code wird korrekt dargestellt

google suche: mime type image/svg....

ps: deine 12 jahre entbinden dich nicht davon höfflich zu sein und die an die forumsregeln zu halten 😁

04.10.2008 - 09:34 Uhr

Drei anmerkungen zu deinem Problem:

  1. du cheater... zwar auf hohem niveau (da du dir den trainer selber schreibst) aber immer noch Cheater 😁
  2. du kannst so viel an den IE senden wie du willst, wenn der nicht Zuhört...
  3. was du machen kannst ist folgendes: eine Tastatur zu simulieren und Tastaturcodes direct ins MessageHandling einspeisen
23.09.2008 - 10:17 Uhr

über google hab ich folgendes gefunden
http://blog.dream-coder.de/?p=201

21.09.2008 - 22:49 Uhr

alos prinzipjell ist WCF dafür gedacht. Jeh nach einstellung nimmt dir WCF threadpooling und einige andere sache ab.

das erkaufst du dir aber unter umständen mit overhead... Entscheident ist hier was du unter "Echtzeitkommunikation" verstehst.

Ich arbeite aktuell an einer software die nachrichten (<200Byte) in unter 1ms durchs system schleusen muss (verteiler) das konnte ich mit WCF ums verrecken nicht realisieren

21.09.2008 - 22:43 Uhr

gulli ist dafür auch ein wenig ... nunja egal

was heißt denn bei dir "webseite anwählen" mal die ip anpingen, prüfen ob ein 4xx oder 5xx zurückkommt?

oder planst du schon etwas komplexeres, wo der inhalt einer webseite geparst werden muss?

16.09.2008 - 09:32 Uhr
  1. Meld dich mal beim GMX Kundendienst, die haben immer ein offenes Ohr ...
  2. Wenn du eine Rundmail losjagen willst und das an jeden user einzeln absetzt gehört dir nicht nur das konto gesperrt ... http://de.wikipedia.org/wiki/Header_(E-Mail) besonderes augenmerk sei dabei auf das BCC-Feld gelegt.

Merke: DU sendest eine EMail zum Verteiler, der macht für dich den Rest.
Das schon a) deine Bandbreite und b) die des verteilers. Da er nun die Mails auch besser bündeln kann. Zu de Hauptverteilern (zb web.de) schicken die dann auch nur eine mail...

sprich das aber in jedem fall vorher mit deinem Mailanbieter ab. Die sehen es gar nicht gerne wenn sie als Relayer missbraucht werden. Wenn du das gewerblich betreibst kommt das extrem ungünstig wenn sie dir deinen account dicht machen

15.09.2008 - 19:33 Uhr

ja merken wirst du es nie...

selbst bei 1000 aufrufen beim langsamsten verfahren (Invoke) braucht es nur 35 sekunden

die schnellste variante ist die iterative-Methode (~ 4ms)

hätte nicht gedacht, dass die Reflection methode so viel langsamer ist ...

alle werte gemessen mit stopwatch

15.09.2008 - 14:04 Uhr

bevor ich jetzt eine perf tester aufsetzte... was ist denkst du was schneller ist, die Reflection mittels Invoke oder die Iterative suche (aus dem bauch heraus)?

15.09.2008 - 09:22 Uhr

Ok dann etwas ausführlicher. Angestachelt durch die Möglichkeiten der DynamicData-Spielweise hab ich mir gedacht "das brauch ich für den Rest auch"

Besonders angetan hat es mir dabei die ForeignKeys Fields.

Bei der angepasten DropDownList kann man sich noch fragen ob es diese ASPX Zeile wert ist ein eigenes UserControl anzulegen...


<asp:DropDownList ID="dropDownList" runat="server" 
                     DataSourceID="dropDownSource" DataTextField="RightName" 
                     DataValueField="RightID" SelectedValue='<%# Bind("RightID") %>'></asp:DropDownList>

Bei einer simplen TextBox wird es jedoch haarig. Ich will nicht ständig mit einer View oder einem speziellen Select die ForeignKey-Eigenschaft auflösen und dann das darzustellende Feld selectieren.

was ich Eigendlich will ist ein TextFeld was ich so parametriere


<uc:ForeignKey runat="server" DataSourceID="dropDownSource" KeyValue="RightID" TextValue="RightName" />

gesagt, getan. Ne UserControl angelegt und entsprechend zurecht programmiert.
Die User-Control funktioniert auch prima... einziges Manko ist die Selectierung der DataSource...

Da ich nur eine ID übergeben kann, muss ich aus den ControlCollections (mittels FindControl) das Steuerelement zu der übergebenen ID finden... dieses wird dann auf IDataSource gecasted und ein Select abgesetzt...

den code dazu siehe ersten post...

meine Frage ist nun gibt es ein "FindControl" das die komplette aktuelle Page durchsucht, bzw alle aktiven Controls findet?

eine möglichkeit (die ich aber nicht sooo schön finde) ist ja folgende
Holzhammermethode: Reflection...


Type pageType = this.Page.GetType();
IDataSource dataSource = (IDataSource)pageType.InvokeMember(DataSourceID, BindingFlags.DeclaredOnly | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField, null, this.Page, null);

14.09.2008 - 19:47 Uhr

ASPX Code


<asp:LinqDataSource ID="dropDownSource" runat="server" ContextTypeName="Wolfpack.Data.SecurityContext" TableName="ACPRight" />
<asp:GridView ID="gridView" runat="server" DataSourceID="tableSource" 
        AutoGenerateColumns="false" AutoGenerateEditButton="true" 
        OnRowUpdating="OnRowUpdating" DataKeyNames="RightID,Label">
    <Columns>
        <asp:BoundField HeaderText="Label" DataField="Label"/>
        <asp:TemplateField HeaderText="Recht">
            <ItemTemplate>
                <uc:ForeignKey runat="server" DataSourceID="dropDownSource" KeyValue="RightID"></uc:ForeignKey>
            </ItemTemplate>
            <EditItemTemplate>
                <asp:DropDownList ID="dropDownList" runat="server" 
                     DataSourceID="dropDownSource" DataTextField="RightName" 
                     DataValueField="RightID" SelectedValue='<%# Bind("RightID") %>'></asp:DropDownList>
            </EditItemTemplate>
        </asp:TemplateField>
        <asp:BoundField HeaderText="Link" DataField="Link" />
        <asp:BoundField HeaderText="Group" DataField="Group" />
        <asp:BoundField HeaderText="Order" DataField="Order" />
    </Columns>
    </asp:GridView>

Der zugehörige CSharpcode im OnLoad des ForeignKey UserKontrol


object dataItem = ((GridViewRow)(this.Parent.Parent)).DataItem;
                Type type = dataItem.GetType();
                Object v = type.InvokeMember(KeyValue, BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty, null, dataItem, null);
                IDataSource dataSource = (IDataSource) Parent.Parent.Parent.Parent.Parent.FindControl(DataSourceID);
                dataSource.GetView("DefaultView").Select(new DataSourceSelectArguments(), new System.Web.UI.DataSourceViewSelectCallback(SelectCallback));

Die interessante Zeile ist die mit den extrem vielen Parents. Um die DataSourceControl zu ermitteln die über die DataSourceID definiert wird wollte ich eigendliche über this.Page gehen. Sobald man aber eine MasterPage benutzt ist man eine Ebene zu hoch (findet die control also nicht mehr)

um nun unterschiedliche strukturen zu unterstützen dachte ich, ich mach auch nem statichen aufruf einen rekursiven in der art:


IDataSource dataSource = (IDataSource)FindDataSource(DataSourceID,this);
Control FindDataSource(string name, Control ebene)
{
      if(ebene==null) return null;
      control = ebene.FindControl(name);
      if(control==null) return FindDataSource(ebene.Parent)
      else return control;

}


kennt jemand einen eleganteren weg?