Laden...

Forenbeiträge von Diräkt Ingesamt 615 Beiträge

02.05.2023 - 17:55 Uhr

Hallo

Verstehe ich es richtig, du willst Json Posten auf ein "Controller" und kein Model für die einzelnen Parameter erstellen?

Wenn du das wirklich machen willst, kannst du dies indem du eine "JsonValueProviderFactory" registirert und ein "JsonValueProvider".
Somit kannst du den Support für Json nachträglich wieder einbauen 😉.

In der JsonValueProviderFactory liest du den Request aus, schaust ob es Json ist, deserialisiert den Inhalt und prüfst ob bspw. die Anzahl Parameter passen und deren Namen.... Sollte das alles passen, kannst du dem Context den JsonValueProvider mitgeben, etwa so:

public class JsonValueProviderFactory : IValueProviderFactory
 {
 public async Task CreateValueProviderAsync(ValueProviderFactoryContext context)
       {
           if (context == null)
           {
               throw new ArgumentNullException(nameof(context));
           }
          //we are only interested in "body" attribute since we are extracting the body, ignore from Query Attribute
          var parameters = context.ActionContext.ActionDescriptor.Parameters.Where(r => r.BindingInfo?.BindingSource?.Id != BindingSource.Query.Id).ToList();
          //do validation, read stream body, check if json, deserialize ...  wenn nun alles passt
          context.ValueProviders.Add(new JsonValueProvider(jObject));
      }
 }

Der JsonValueProvider kann dann etwa so aussehen

public class JsonValueProvider : IValueProvider
   {
       private readonly JObject m_jObject;
       public JsonValueProvider(JObject jObject)
       {
           m_jObject = jObject;
       }
       public bool ContainsPrefix(string prefix)
       {
           return m_jObject.ContainsKey(prefix);
       }
       public ValueProviderResult GetValue(string key)
       {
           return new ValueProviderResult(new StringValues((string)m_jObject[key]));
       }
   }

Nicht vergessen die JsonValueFactory zu registrieren im Startup

options.ValueProviderFactories.Add(new JsonValueProviderFactory());

Viel Spass

10.11.2022 - 08:06 Uhr

Hallo FrankyD95

Ich würde ein ViewModel erstellen. Dieses kann bspw. ein Property haben "bool Authorized". Alle Buttons binden Ihr Enabled Property nun auf dieses ViewModel Property "Authorized".

Edit:
Databinding

07.08.2022 - 10:34 Uhr

Wenn die Schriftart vorhanden ist, kannst du sie mit dem Namen ansprechen (siehe Font ctor). Sonst kannst du ein Pfad angeben wo diese gefunden wird.

Lg

06.08.2022 - 11:16 Uhr

Hallo

Es gibt dafür einige Komponenten welche das können, wenn du nach "replace fonts in pdf c#" googelst, findest du diese 🙂
Ich würde das nicht selbst machen wollen, hoffe du kannst eine fertige Komponente einsetzen.

Am einfachsten ist das Vorgehen etwa so:

  • PDF laden
  • Verwendete Schriftarten ersetzen

Wenn du dies nur für gewisse Texte machen willst etwa so:

  • PDF laden
  • Text suchen
  • Ersetzen mit Text mit deiner Schriftart

Beispiele:

Spire PDF
Syncfusion
Aspose
usw....

06.12.2021 - 15:41 Uhr

Hallo Kriz

Ich würde Dir von FTP abraten (auch von den sichereren Varianten wie FTPS oder SFTP). Nutze dafür besser eine REST API (bspw. ASP.NET Core Web Api) und lege die Bilder in einem BlobStorage ab. Die Authentifizierung kannst du da bspw. über ein Token im Header machen... (OAuth, ...)

Nun zu Deiner Frage. Dein Controller könnte die ersten paar bytes auslesen und daran erkennen ob es sich um ein Bild handelt.

(Achtung bei sehr vielen Requests könnte das recht Memory intensiv werden 😉)

Beste Grüsse

Diräkt

26.08.2021 - 11:46 Uhr

Ein Kumpel meinte es wäre besser das mit SignalR

Irgendwo brauchst du ein Backend um Pub/Sub (siehe erste Antwort) zu managen. SignalR kannst du im Frontend einsetzen um anhand von Notifications eines WebHook im GUI etwas anzuzeigen oder was anderes zu wurschteln 🙂

Woanders bekam ich den Vorschlag es mit SSE

Hier sind die Unterschiede erklärt.

Beste Grüsse

26.08.2021 - 11:36 Uhr

Guten Tag

Eigentlich stellst du Events zur Verfügung. Die Subscriber können solche abonnieren um über "Änderungen" informiert zu werden. Dafür kannst du bspw. ein Pub/Sub Pattern verwenden.

Ein schöner Artikel mit ausführlichen Beschreibung findest du in diesem Blog.

Liebe Grüsse

08.07.2021 - 12:13 Uhr

Hallo Krumnix

Ich würde Dir empfehlen, dass File gar nicht zu speichern sondern bei Bedarf "on-the-fly" zu generieren.

Um auf Deine Frage einzugehen:
Da gibt es sehr viele Wege dazu, vom einfachen string.Replace() bis hin zu "data templating".

Als Idee, schau Dir mal folgendes an:
templated-serialization-of-c-sharp-objects-to-json
https://www.abhishek-tiwari.com/jsonnet-a-data-templating-language-from-google/

30.01.2020 - 16:58 Uhr

Ich möchte eine eigene Implementierung für ClientValidatorCache verwenden.

Problem:
-> Die Klasse besitzt kein Interface
-> Die Methode GetValidators ist nicht virtual
-> _cacheEntries ist private

Was ich versucht habe:
-> Von der Klasse erben und GetValidators "hiden" mit new GetValidators(...)

Es wird zwar meine Klasse verwendet jedoch klappt das "hiden" nicht wirklich, es wird die Basis-Methode aufgerufen.

Jemand eine Idee?

Ziel:
-> Properties von meinem Model können zur Laufzeit bspw. mit "Required" markiert werden. Serverseitig funktioniert alles (ModelBinder sind ja schön erweiterbar ...), jedoch werden die client-validatoren gecached und ClientValidatorCache ist nicht wirklich gut erweiterbar... Dies führt dazu, dass der gecachte validator benutzt wird ungeachtet der neuen ValidationMetaData.

Framework:
asp.net core 3.1

02.01.2020 - 15:03 Uhr

Hallo Darkblue94

Du könntest bspw. ein Enum erstellen ? l? :

None = 0,
Januar =1,
Februar =2
....

Dann könntest du den String in den Enum parsen und damit rechnen.

(MyEnum)Enum.Parse(typeof(MyEnum), stringInput);

Ich würde mir überlegen anstatt TextBoxen dann gleich DropDowns zu verwenden, dann kannst du den Value definieren. Dann könntest aber auch auf den Enum verzichten und als Value für Januar gleich 1 verwenden.

Beste Grüsse

Diräkt

26.10.2015 - 07:14 Uhr

Hallo pixfreak

Lösche mal die "SUO" Datei in Deiner Solution (hidden).

Beste Grüsse

Diräkt

13.06.2015 - 13:19 Uhr

Hallo Chipsland

Ich habe mir Deine Spaghettis mal angeschaut 😃

C#-Code:
double Waehrung1 = Convert.ToDouble(textBox1.Text);

"FormatException wurde nicht behandelt. Die Eingabezeichenfolge hat das falsche Format"

In der Hilfe steht doch alles dazu:

Convert.ToDouble(string)

=> FormatException bedeutet, der string wurde nicht als "Double" erkannt. Die hat warsch. mit CultureSettings zutun. (Culture Invariant)

Als Tipp:
=> Ich würde es eher etwa so aufbauen:
BasisKlasse Währung
Alle Währungen erben davon (jede soll eine Klasse sein) und überschreiben bspw. den WechselKurs. Dein Code würde sich dann auf etwa 2 Zeile reduzieren àlà
doubleEingabe * (comboSelectedItem as Waehrung).Kurs.

Zudem könntest du dann später sehr einfach die aktuellen Kurse einfach von EZB oder ähnlichem laden usw...

Schau Dir ggf. mal Vererbung an.

Ich hoff diese Beitrag kommt noch durch bevor der Thread wegen "Absoluten Grundlagen" geschlossen wird.

Schönes Weekend

Diräkt

30.05.2015 - 00:34 Uhr

Hallo Abt

Danke für Deine Antwort.

Hm, es gibt ja 2 Einstellungen, einmal die vom ConnectionString für die Verbindung und dann noch das CommandTimeout. ( Führen jeweils zu einem anderen Fehler, wenn Vorgang länger dauert )

Selbst wenn ich lokal auf die AZURE DB zeige, und mein Initializer aufrufe erhalte ich den TimeOut Fehler.

m_db.Context.Database.Initialize(force);

Wenn ich vorher aber ein SQL STATEMENT absetze:

CREATE DATABASE ...

Danach den Initializer laufen lasse, klappt es ohne den Timeout fehler.
Meine DB hat etwa 10 Tabellen und vielleicht 50 Datensätze initial. Also absolut lächerlich.

Eine Idee ?

Der Fehler lautet:

Fehlermeldung:
Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. This failure occurred while attempting to connect to the routing destination.

( Der ConnectionString Timeout Fehler würde etwas anders lauten, weiss gerade nicht mehr... )

EDIT:
=> Vielleicht eine noch wichtige Anmerkung 😃
Das besagte Verhalten habe ich erst seit ich AZURE 2.6 und EF 6.1.3 verwende

29.05.2015 - 18:04 Uhr

verwendetes Datenbanksystem: <Azure SQL> -> EF 6.1 -> CodeFirst

Liebe Leute

Wenn ich mein Projekt deploye auf AZURE erhalte ich immer ein TimeOut (SQL AZURE).
(Beim erstellen der DB, Seed wird erst gar nicht aufgerufen)

Nach langem Testen und Debugen ist mir dabei folgendes aufgefallen:

=> DB wird erstellt ohne Tabellen
=> TimeOut.

Wenn ich die DB aber per SQL selbst erstelle, danach den Initializer aufrufe, klappt alles.

Ich behaupte also dass die Eigenschaft CommandTimeOut für die Erstellung der Datenbank auf dem Context ignoriert wird. (Bei Azure dauert das anlegen einer DB gut mal 40-50 Sekunden, default ist 30 Sekunden TimeOut).

Kann das jemand bestätigen oder hat ähnliche Erfahrungen ?

Beste Grüsse

Diräkt

28.04.2015 - 16:34 Uhr

Liebe Leute

Ich suche eine LIB die folgendes unterstützt:
=> PDF to IMAGE (1. Seite reicht)

Dazu gibts ein paar Voraussetzungen:
=> LoadFromStream() ist pflicht
=> Keine Abhängigkeit zu GhostScript oder ähnlichem

Genial wenn es OpenSource wäre oder zumindest nicht all zu teuer ist.

Beispiel:
.NET PDF

Diese Lib würde alle Anforderungen unterstützen, nur das LoadFromStream für die gratis Version nicht verfügbar ist und nur LoadFromFile geht 😦 und 600 Dollar um ein paar PDF Thumbs zu haben ist doch nicht ganz billig 😃

Beste Grüsse und besten Dank für Tipps.

Diräkt

25.04.2015 - 13:44 Uhr

Herzlichen Dank für die Tipps.

Da ShellFile das File von Windows representiert, sind Thumbs nur verfügbar wenn die entsprechenden Programme auch auf dem Server installiert sind, daher ist es für WEB sowieso das Falsche.

Besten Dank und beste Grüsse

Diräkt

24.04.2015 - 08:31 Uhr

Hallo Steven85

Kann ich wenn ich in dem Item_Command Event bin und dort die Datenbankaktualisierung mache, eine Messagebox aufrufen die sowas beinhaltet wie "Sind sie sicher?"

Also eine MessageBox gibts nicht 😉. Dein Vorhaben ist nicht ganz trivial.

Der einfachste Weg wäre:
=> Den "Update" oder "Save" (Link,Button whatever) eine client Methode hinzufügen, z.B. confirm.

Alternativ geht auch:
=> Serverseitig kannst du ein Script registrieren. (Um bspw. im Item_Command Event dann ein Confirm anzuzeigen oder was auch immer)
( Script Manager
=> Nach dem du das confirm result hast, kannst du ein WebService aufrufen (oder PageMethod) um dann die Aktion durchzuführen.

Die Javascript Funktion confirm('...') kenne ich, jedoch ist da das Problem das ich ja bereits in der Codebehind bin. Hoffe sowas ist möglich das ich beim klick auf nein oder abbrechen aus der Codebehind rausspringen kann.

Sowas wie (pseudo):

'.....
messageBox.Show("...");
if(messageBox.Result == "Ok")
{
   ...
}
'.....

Sowas geht nicht, wird nie gehen, und ist Winform style, hat mit Web nichts zutun.
Du arbeitest im Web mit Callbacks für solche Szenarien...

Beste Grüsse

Diräkt

23.04.2015 - 17:58 Uhr

Hallo Steven85

Um an die Controls innerhalb des ItemTemplates zu kommen musst du folgendermassen vorgehen:


TextBox edAlias= (TextBox)e.Item.FindControl("edAlias");

Beste Grüsse

Diräkt

20.04.2015 - 16:14 Uhr

Liebe Leute 😃

Problematik:

Thumbs generieren funktioniert in WinForms Applikation.
Thumbs generieren funktioniert auch in WebForms, aber nicht für PDF ?! (hier erhalte ich nur das PDF Icon anstatt die erste Seite als Vorschau)

Code:


 public Bitmap GetBitmapFromFilePath(string filePath)
        {
            ShellFile sFile = ShellFile.FromFilePath(filePath);
            sFile.Thumbnail.FormatOption=ShellThumbnailFormatOption.ThumbnailOnly; ***
            return sFile.Thumbnail.MediumBitmap;
        }

*** Wenn ich dieses Property setze erhalte ich in der WebForms Applikation folgende Exception:
ohne diese Zeile erhalte ich bei Webforms das PDF Icon und bei Winforms die erste Seite als Preview.

( Class not registered (Ausnahme von HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)) )
(Soll wohl soviel heissen wie; keine Vorschau vorhanden)


=> Ich benutze den selben Rechner für Winform und Webform Test => Ich benutze das selbe File für Winform und Webform Test

Jemand eine Idee ?

( Hier scheint jemand das gleiche Problem zu haben, leider ohne Lösung )
Stackoverflow - Windows Api Code Package Shell Thumbnail Generation

Beste Grüsse

Diräkt

31.03.2015 - 13:36 Uhr

Die Antwort von lechiffre kann ich so nicht ganz stehen lassen:

Es wird auch immer mehr auf die HttpServices gesetzt von Microsoft und weniger auf WCF , man kann gar nicht genau sagen was mit WCF passiert in Moment.

WCF setzt man ein wenn ein Service für mehr Protokolle als nur für HTTP zur Verfügung stehen soll. Du kannst mit WCF auch REST Services bauen, ist ggf. etwas mehr Overhead dabei (meistens absolut egal). WebAPI ist einfach viel näher am HTTP Protokoll (unterstützt ja auch sonst nix) 😃

Beste Grüsse

Diräkt

31.03.2015 - 11:17 Uhr

Hallo Gogeta

Das funktioniert problemlos.

Stichwörter:
=> Web API
=> WCF

Wie kann ich auf die Funktionen (des Services) verwenden ?

Bei WebApi:
=> GET / POST / ... (HTTP VERBS)

Bei WCF:
=> GET / POST / ... (HTTP VERBS)
=> WSDL ( => für .Net Clients, fast als wäre es eine "normale" thirth party dll)

Ich würde Dir WebApi empfehlen zu verwenden.

Diese Funktion soll später auf einer App(iOS) angepasst werden(das Handy wird dann über VPN mit dem Netzwerk verbunden sein).

Wo genau und wie es dann läuft ist eigentlich egal, alle Scenarien sind damit abdeckbar.

Beste Grüsse

Diräkt

27.03.2015 - 09:59 Uhr

Hallo Gogeta

  1. Wie kann ich die MaxReceivedMessageSize auf unendlich stellen ? Denn bei mir kommt meistens der Fehler, dass die angefoderten Daten zu groß sind 😦

Leider weiss ich nicht was für eine Art Web-Service du verwendest.
(WebApi, Wcf, asmx ....)

Es lässt sich aber per config konfigurieren. Bei WCF könnte das etwa so aussehen:

<customBinding>
       <binding name="customBinding0">
         <binaryMessageEncoding />
         <!-- Start change -->
         <httpTransport maxReceivedMessageSize="2097152"
                        maxBufferSize="2097152"
                        maxBufferPoolSize="2097152"/>
         <!-- Stop change -->
       </binding>
     </customBinding>

Ich weiß bei PHP kann ich die daraus entstandene .php Datei auf mein Server packen und ich könnte darauf zugreifen. Doch leider weiß ich nicht wie ich das bei .Net schaffe 😦

Um eine "WebApplikation" oder ein "WebService" hosten zu können, braucht man ein WebServer. Bei PHP ist das bzw. der Apache. Bei .NET benutzt man dafür hauptsächlich den IIS. Die Konfiguration des IIS nun aber zu erklären würde den Rahmen hier sprengen. In Kürze sieht das etwa so aus:

=> IIS Install
=> IIS Konfig
=> Deployment (bspw. upload...)
=> Create AppPool
=> Create App

Beste Grüsse

Diräkt

Edit: Formatierung

19.03.2015 - 08:00 Uhr

Hallo Abt

Das stimmt. Meine Frage bezieht sich viel mehr auf folgendes:

=> Ein Addon besteht aus einer DLL und ein paar Views

Problematik:

=> Das Addon muss auf alle Instanzen "installiert" (kopiert) werden beim Upload.

Damit dies garantiert passiert, dachte ich eben an folgenden Workflow:

=> Package downloaden (Azure Management API)
=> Package manipulieren (files adden...)
=> Package wieder hochladen (Azure Management API)

Mit der Hoffnung es gäbe eine bessere Möglichkeit 😃

Beste Grüsse

Diräkt

18.03.2015 - 19:58 Uhr

Danke Abt für Deine Antwort.

Also wäre nur folgendes Möglich:
=> Package downloaden (Azure Management API)
=> Package manipulieren (files adden...)
=> Package wieder hochladen (Azure Management API)

Ich seh das momentan als einzige Lösung, die aber mehr schlecht als recht ist, wie siehst du das ?

Beste Grüsse

Diräkt

Edit:
=> Oder wie macht das ein CMS (bspw. DotNetNuke) wenn man es auf einer Webfarm betreibt und ein Plugin installiert ?!

18.03.2015 - 19:41 Uhr

Liebe Leute

Weiss jemand ob folgendes realtiv einfach möglich ist:

=> Web-Role Update:
===> Hinzufügen von DLL und Files ohne ganzes Package zu builden.

Mein Ziel ist es "Addons" auf allen Instanzen installieren und bekannt machen zu können, direkt von der Applikation aus.

(Verwendet wird heute Azure Web-Roles (PaaS) (mehrere Instanzen), das deployment geschieht heute über VS)

Danke für Inputs.

Diräkt

18.03.2015 - 17:49 Uhr

Hallo JanLKuhl

Es ist bekannt das es zu Performance- Probleme bei vielen (gesamt Anzahl aller Controls auf einer Form, egal wie verschachtelt) kommt.

Du findest hier auch einige Tipps dazu im Forum (Suche nutzen), hier ein Beispiel:
Optimierungsideen

Ich persönlich würde versuchen nur zu zeichen was gerade angezeigt wird. (Virtualizing) Und wenn du kannst WPF dafür nutzen !

Und die Form beim Resize ordentlich in die Knie geht.

Dafür könnte man folgendes verwenden:
(bspw. um die Vorschau von Resize du "deaktivieren")

panel.SuspendLayout();
panel.ResumeLayout();

Ist aber eher ein Hack.

Hier hab ich noch ein Link gefunden für Dich:
TableLayoutPanel slowly

Beste Grüsse

Diräkt

11.03.2015 - 12:14 Uhr

Hallo Dolce

Ich gehe davon aus (laut Beschreibung) das du WebForms nutzt.

Wenn ich nun den Button im UserControl zweimal nacheinander betätige, vergisst der Browser alle Sessions, welche ich verwendet habe, und somit auch auf welchem UserControl ich mich befunden habe. Das bedeutet nun für mich, dass ich nur einmal speichern kann was usability mässig völliger Quatsch ist.

Nach einem Postback müssen die Usercontrols in der selben Reihenfolge wieder erstellt werden, du meinst wohl eher auch Viewstate anstatt Session.

Ich versteh das Problem immer noch nicht ganz richtig, aber wenn du wissen willst in welchem Control das etwas verändert wurde, kannst ja jedem eine einzigartige ID geben, beim neu erstellen die Selbe wieder verwenden, dann weisst du wo etwas geändert wurde ?!

Um nun die editierten Information speichern zu können verwende ich einen Button mit ClickEvent (AutoPostBack=False).
Soweit funktioniert alles so wie es soll und nach dem Speichernevent wird mir das UserControl neu mit den gespeicherten Informationen geladen.

Ist das nicht ein Wiederspruch ? Wenn der Button kein Postback auslöst, handelst du es Clientseitig ? Warum wird dann etwas neu geladen?

Beste Grüsse

Diräkt

11.03.2015 - 10:51 Uhr

Hallo Dolce

Ich versteh die Frage nicht ganz:
=> Du kannst Pages aufrufen aber nicht UserControls
=> Pages können Usercontrols haben

Auf einer Page kannst du Controls auch dynamisch laden via:


Control ctrl=Page.LoadControl(string url);
myContainer.Controls.Add(ctrl);

Auch Casten ist natürlich möglich... :


Control ctrl=Page.LoadControl(string url);
var myCrazyControl = (MyCrazyControl)ctrl;
myCrazyControl.CrazyProperty = "123";
myContainer.Controls.Add(ctrl);

Sollte dies Deine Frage nicht beantworten, bitte versuch Sie etwas umzuformulieren 😉

Beste Grüsse

Diräkt

10.03.2015 - 18:42 Uhr

........

=> AccessFailedCount wird immer gesetzt, auch wenn vorher schon 0, Update wird also immer ausgeführt...

Sehr unschön aber MS hat es so implementiert und wir können es ja überschreiben 😉.

Beste Grüsse

Diräkt

10.03.2015 - 18:18 Uhr

EF, SQL 2012

Liebe Leute

Ich teste gerade Asp.Net Identity etwas ausführlicher, dabei ist mir folgendes aufgefallen:


 var signinManager = HttpContext.Current.GetOwinContext().GetUserManager<ApplicationSignInManager>();
var result = signinManager.PasswordSignIn(user, password, remember, shouldLockout: true);

Führt zu einem Update Statement (nur per Profiler sichtbar), in dem alle Spalten von User updatet werden ?!?!

Verantwortlich dafür ist wohl folgendes das bei PasswordSignIn irgendwann aufgerufen wird:


public virtual void Update(TEntity entity)
        {
            if (entity != null)
            {
                Context.Entry(entity).State = EntityState.Modified;
            }
        }

Asp.Net Identity Source Code
(ganz unten)

(=> bemerkt weil ich ein ChangeTracker implementiert habe, der vor SaveChages() alle Modified Entities ausgibt)

Da wirklich kein Wert beim Login verändert wird, ist mir das unerklärlich und absolut unlogisch, kann mir wer auf die Sprünge helfen ?

Besten Dank und beste Grüsse

Diräkt

27.01.2015 - 17:40 Uhr

Hallo Sharpshark

Herzlich Willkommen auf mycsharp.de

Ist es irgendwie möglich, dass sobald ich etwas bestimmtes in textBox1 eingebe, es in textBox2 um die Länge von textBox1 "verkürzt" wird?

Ich würde mal sagen es ist so ziemlich alles möglich.

Mit TextBox1.Text.Length erhältst du die Anzahl Zeichen der TextBox1. Mit TextBox1.Text="abc" setzt du den Text einer TextBox. Und das letzte was du noch gebrauchen könntest wäre SubString

Damit kannst du Dein Vorhaben einfach umsetzen.

Beste Grüsse

Diräkt

15.01.2015 - 08:08 Uhr

Herzlichen Dank für Eure Antworten.

Die App wird leer ausgeliefert und man lädt sich den gewünschten Content nach.

@t2t
Mit Chunks scheints wirklich problemlos zu funktionieren!

@malignate
Genau das war wohl das Problem ( json serializer... )

@pinki
Danke für die Inputs, der Inhalt wird nach dem ersten Start ausgewählt

@Abt
Es wird nicht in den DOM geladen, sondern direkt in die sqlite db.

_PS: das von Dir kurios bezeichnete Browser im "Eierphone" ist aktuell Leistungssärker als Chrome Mobile, obwohl beide WebKit verwenden... FYI. _
Sobald der Content ein paar Bilder (als Base64) enthält, fängt es an zu spucken / crashen.... Ist das so ?

Beste Grüsse

Diräkt

12.01.2015 - 14:29 Uhr

Hallo Leute 😃

Eine App (Cordova) auf dem Phone, setzt per $.ajax() ein Request auf ein WCF Service ab (sync).
Im Simulator funktioniert alles wunderbar.

Auf dem Device stürzt die App während (oder nachdem...) syncen ab. Es werden Initial 50 MB übertragen (JSON).

Ist etwas bekannt, das es ein LIMIT gibt auf dem Ei(er)Phone?
Gibt es da irgend ein "Application Log" ?
Muss ich nun wirklich das ganze in Chunks übertragen?

Beste Grüsse und besten Dank

Diräkt

10.01.2015 - 12:28 Uhr

Hallo Stirn

Am besten die neuen Daten gehen direkt in die DB ohne Umweg über File

Wenn das nicht geht, dann könntest du die Files welche du in die DB geschrieben hast löschen.

Wenn das auch nicht geht, brauchst du irgendwas einzigartiges (FILE ID, FILE GUID....), dann kannst vergleichen. ( ggf. sogar TimeStamp (sync) .. )

Beste Grüsse Diräkt

07.01.2015 - 14:15 Uhr

Hallo Abt

Danke für Deine Antwort.

Ich werde mich gleich tiefer damit beschäftigen, doch erlaube mir noch eine Frage 😃

Und zB Modul 3 kannst Du dann via DI zum einen den DbContext bekannt geben, und auch die anderen Module. Du hast da volle Freiheiten.

Das würde ja genau in dem Context "zusammengeflicker" enden ?!

Beispiel:

BASIS DAL
User
Roles

MODULE1
TblMod1

MODULE2
TblMod2

MODULE3

Nun gibts das berühmt und berüchtigte MODULE3 das Zugriff auf TblMod1 und TblMod2 benötigt.
Bekannt ist ja nur BASIS DAL also User und Roles. Nun kann ich MODULE1 und MODULE2 bekannt machen, habe dann aber 3 Context ?!

Was versteh ich nicht ? 😃

Danke für die Aufklärung.

Beste Grüsse

Diräkt

07.01.2015 - 13:18 Uhr

Hallo Abt

Herzlichen Dank für Deine Antwort.

Dependency Injection ist ein sehr gutes Stichwort. Kannst du mir erklären wie ich damit eine Erweitung des BasisContexts von Modul A dem Modul B bekannt mache ?

Besten Dank

Diräkt

07.01.2015 - 10:51 Uhr

verwendetes Datenbanksystem: SQL 2012 ; EF 6 Code First

Liebe Leute 😃

Ziel:
Wir wollen Plugins erlauben den DB-Context zu erweitern

Problematik:
DAL Chaos zusammengeflicker

Vorstellung:

Es existiert ein "DAL BASE" welcher grundlegendes beinhaltet (User, Rollen ....)
Nun soll jedes Plugin die Möglichkeit haben von DAL BASE zu erben und seine eigenen Tabellen anzulegen. (Dies kann ja per Migration geschehen) soweit ok.

Problematik Beispiel:

Sobald die Module aber untereinander kommunizieren können sollen, wird es meiner Meinung nach etwas problematisch?!

Modul 1 (DAL Modul 1)
Modul 2 (DAL Modul 2)
Modul 3 (benötigt DAL Modul1 und DAL Modul2)

DAL MODUL 3 müsste also von DAL MODUL 1 und von DAL MODUL 2 erben, was ja aus guten Gründen schon mal nicht geht (mehrfach-vererbung), also würde es in ein "DbContext geflickerei" enden?!

Oder wie löst man das anständig ?

Besten Dank für Inputs

Diräkt

07.01.2015 - 10:38 Uhr

Danke für Eure Antworten Coffeebean, Abt und Herbivore.

deine Modulare Trennung beinhaltet ja auch die Trennung der Schichten. Somit stimmt der Titel nicht so ganz.

Module zu bauen, die GUI, BL und DAL in sich vereinen, halte ich wegen Separation of Concerns und Single-Responsibility-Prinzip nicht für sinnvoll. Das sollte schon getrennt werden/bleiben.

Die Modulare Trennung (weil die Module dann ja wirklich klein sind), würden gleich DAL,BL,GUI beinhalten, da gäbe es also "keine" Schichten-Trennung mehr. Auch ich sehe das als "schlecht" an, genau wie es herbivore schreibt. Behält man die Schichten aber bei wird dies meiner Meinung nach nicht wirklich übersichtlicher denn bei 30 Modulen hätte man ja bereits etwa 120 Projekte...
(DAL;GUI;BL;SERVICE)

Sind diese 120 Projekte nicht in der selben Solution wird auch Refactoring etc. nicht unbedingt einfacher...

Also sind wir eigentlich wieder bei der Einstiegsfrage nur kann ich diese nun hoffentlich etwas besser formulieren:

=> Bei einem System bei dem oft neue Module hinzukommen, an dem mehrere Entwickler arbeiten:

Ist es sinvoll die Applikation in 4 Layers zu trennen:
=> GUI; DAL; BL; SERVICE
oder wäre es tatsächlich "besser" diese nochmals zu unterteilen in
=> Modul1
=> GUI;DAL;BL;SERVICE
=> Modul2
=
> GUI;DAL;BL;SERVICE

(das die Module keine Schichten-Trennung mehr beinhalten sollen, lass ich gleich weg 😉)

Was meint Ihr ?

Beste Grüsse

Diräkt

06.01.2015 - 17:37 Uhr

Liebe Leute 😃

Gerne würde ich Eure Meinung zu folgendem Thema erfahren:

Es handelt sich um eine grössere Web-Applikation welche auch in Zukunft gewartet werden soll:

Ist es besser dieses nach Layer zu trennen:

=> GUI
=> DAL
=> BL

oder nach Modulen

=> Modul1 (GUI;DAL;BL)
=> Modul2 (GUI;DAL;BL)

Überlegung:
=> Eigentlich kommen ständig neue Module hinzu, jedoch nicht neue Layers.
=> Wenn man nach Modulen trennt ist jeweils nur eine DLL bei einer Änderung betroffen und nicht gleich alle (DAL;BL;GUI)

Was sind Eure Überlegungen warum würdet Ihr das eine vom anderen "präferieren" ?

Beste Grüsse und besten Dank für Eure Inputs

Diräkt

08.12.2014 - 15:12 Uhr

verwendetes Datenbanksystem: SQL 2012 -> EF

Hallo Leute 😃

Früher sah ich die Entities auch wie im Screenshot, jedoch kein Count, erst beim öffnen des Entity-Types und dann auf das drücken von "refresh" wurden die Daten + ( Count ) geladen.

Heute ist mir aufgefallen, das alle Daten zur Verfügung stehen !! Inteli-Trace zeigt mir aber kein Call an nur immer SELECT TOP (1) ............. (was auch dem Code entspricht)

( Ja Lazy Loading ist aktiviert, Nein es wird auf kein Typ zugegriffen der per Lazy-Loading nach geladen werden müsste )

=> Ist das irgend ein neues Feature ?
=> Warum werden alle Daten angezeigt ?

Beste Grüsse

Diräkt

10.11.2014 - 10:34 Uhr

Hallo Scrabbl

Wie genau bindest du die Daten an das GridView ? Und wo genau ?

Für mich hört es sich so an, als würde das Grid mit den Daten erst beim Aufruf der TabPage gerendert. Und mal ganz ehrlich, es macht keinen Sinn 3-5k Zeilen anzuzeigen.

Schau Dir doch mal das Thema Virtualizing sowie beim DataGridView den VirtualMode an.
( Das Ziel ist es nur zu laden (und zu rendern) was gerade auf dem Screen zusehen ist, weil niemand kann 5k Zeilen in 1s verarbeiten, du kannst aber schneller nachladen als ein Mensch Zeilen verarbeiten kann .... )

Beste Grüsse

Diräkt

05.11.2014 - 13:46 Uhr

Hallo Thorran

Danke für die Infos.

Hier hatte jemand das gleiche "Problem". Versuch mal diese Lösung aus:

Wie liefert man eine Anwendung mit dem Entity Framework und einer alternativen Datenbank aus?

Es wäre toll, auch wenn es klappt, hier ein Feedback zu hinterlassen.

Beste Grüsse

Diräkt

05.11.2014 - 12:57 Uhr

oll der webservice die zu übermittelnden Daten von meiner consolenapp erfragen.. da diese ja erst die Daten via RS232 von der Platine abfragen muss.

Hallo inek

Entweder du schreibst die Daten regelmässig in eine DB und der WebService gibt die Daten der DB zurück. Wenn du das àlà "on demand" haben möchtest, würde ich ein Windows Service schreiben, über Interprozesskommunikation kannst du dann vom WebService aus mit deinem Windows Service kommunizieren, welcher die Daten via RS232 "on demand" abfragt.

Beste Grüsse

Diräkt

Edit:
=> Oder direkt vom WebService Dein RS232 Port abfragen (wenn das Teil am Server hängt 😉 )

04.11.2014 - 17:30 Uhr

Hallo DanielLass

Wie würdet ihr das umsetzen bzw. wie ist es überhaupt möglich? Mit der Listbox?
Ich verwende ein Windows Forms Projekt.

Nicht mit Windows Forms 😃, Spass beiseite...

Ich würde mir erst die Frage nach den genauen Anforderungen stellen.
(Filtern, Sortieren, Gruppieren ....)

Sollte es keine grossen Anforderungen haben würde ich ein eigenes Control dafür bauen. Sollten die Anforderungen grösser sein, würde ich mir überlegen ein GridView zu nehmen und ein Item-Template zu erstellen.

Ich hatte schon lange nichts mehr mit Winforms am Hut, aber da gibts sicher sowas wie ein Item-Template oder ähnliches, auf die Schnelle habe ich mal was gefunden, was ggf. ein paar Ideen geben könnte:

How to Host a Color Picker Combobox in Windows Forms DataGridView Cells

Ganz ehrlich würde ich aber noch die Antwort von jemandem abwarten der mehr als ich mit Winforms am Hut hat.

Beste Grüsse

Diräkt

04.11.2014 - 16:42 Uhr

Hallo C#bass

Schau Dir doch mal bitte das an: Wie verwende ich den Debugger

Beste Grüsse

Diräkt

04.11.2014 - 15:53 Uhr

Hallo Thorran

Du hast auf dem Rechner wo Deine App den Fehler ausspuckt den SQL Server installiert ? Welche Version ?
( Kannst du mit dem Management Studio auf den SQL Server da zugreifen ?)

Dann bitte poste noch das app.config, dann kann Dir sicher geholfen werden.

Beste Grüsse

Diräkt

04.11.2014 - 15:48 Uhr

Hallo C#bass

Bevor das Thema wegen "Anfängerfrage" geschlossen wird, werde ich Dir diese beantworten 😃

Jedes Event hat 2 Parameter, der erste ist der sender (object) und der zweite sind die EventArgs.
(Wobei von EventArgs abgeleitet werden kann...)

Du musst nun den sender in den entsprechenden Typ casten und solltest haben was du brauchst.

Beste Grüsse

Diräkt

27.10.2014 - 16:02 Uhr

Hallo DiscMaster

Gibt es mit C# eine Möglichkeit in einer Datei zu lesen, ohne dass der Schreibzugriff gesperrt wird?

Stackoverflow -> Read file without locking ?
Coding Blog -> How do open a file taht is in use ?

P.S.
_
=> Warum nimmst du nicht eine Datenbank ? ( Kann auch auch was wie SQL-Lite sein )._

Beste Grüsse

Diräkt

15.09.2014 - 11:40 Uhr

Wenn du keine Games entwickelst würde ich mir überlegen Hybrid Applikationen zu bauen.

Mit CORDOVA (HTML5 + Javascript) kannst du die meisten nativen Funktionalitäten des Phones nutzen, und die App dennoch für alle Platformen (Android, IOs, WP) zur Verfügung stellen.

Ich setze dies schon lange ein und hab sehr gute Erfahrungen damit gemacht.

Beste Grüsse

Diräkt