Laden...
P
Powerslave
myCSharp.de - Member
120
Themen
554
Beiträge
Letzte Aktivität
vor 10 Jahren
Dabei seit
10.10.2005
Erstellt vor 10 Jahren

Ok, es ist wirklich ein "Port Timeout = 30 seconds" am Gerät eingestellt.

Dann krieg ich das hin, danke.

Erstellt vor 10 Jahren

Danke,
Möglich ist es bestimmt. Hab leider so gut wie keine Schnittstellenbeschreibung vom Gerät. Kann mir aber morgen nochmal die Konfiguration anschauen, ob ich dort was von nem Timeout finde.

Falls es so wäre, wie könnte ich denn darauf reagieren, da meine Applikation ja die Verbindung aufbaut und der Scanner nichts von meiner App weiß?
TcpListener kann ich in diesem Fall ja nicht verwenden, TcpClient ist schon die richtige Komponente oder?

Erstellt vor 10 Jahren

Hallo,

ich connecte mich über TCP mit einem Ethernet-Barcodeleser, der eine IP-Adresse hat.

Dazu verwende ich folgenden (vereinfachten) Code:


using (TcpClient client = new TcpClient("192.168.20.41", 1002))
{
    using (NetworkStream stream = client.GetStream())
    {
        while (true)
        {
            int readCount;
            byte[] data = new byte[client.ReceiveBufferSize];

            while (stream.DataAvailable && (readCount = stream.Read(data, 0, client.ReceiveBufferSize)) != 0)
            {
                strData += Encoding.UTF8.GetString(data, 0, readCount);
            }

            if (!string.IsNullOrWhiteSpace(strData) && strData.EndsWith(endOfLine))
            {
                OnRead(strData);
                strData = "";
            }

            //Thread.Sleep(200);
        }
    }
}

Wenn ich die Applikation starte und Barcodes einscanne erhalte ich die richtigen Werte vom Gerät. Wenn ich allerdings 30 Sekunden im Leerlauf bin, also 30 Sekunden lang seit dem Start der Applikation oder seit dem letzten gescannten Barcode vergangen sind, werden keine Daten vom Gerät mehr empfangen. Networkstream.DataAvailable bleibt immer false, TcpClient.Available bleibt immer 0, aber TcpClient.Connected ist immernoch true. Wenn ich die Applikation neustarte, geht es wieder.

Muss ich die Verbindung irgendwie am Leben halten? Was könnte dafür sonst die Ursache sein?
Vielleicht hat jemand eine Idee.

Danke im Voraus!

Erstellt vor 13 Jahren

Ja, ich möchte gerne Linq mit NHibernate verwenden.

Kann gut sein, dass ich es noch nicht ganz verstanden habe.

Heißt das, das die Linq-Queries nicht ins Dao gehören, sondern eher in ein Repository bzw. direkt in den ServiceLayer (wenn ich IQueryable verwende)?

Erstellt vor 13 Jahren

Danke für dein Beispiel,

vielleicht war das "StartsWith"-Beispiel ein schlechtes, da man wie du es eben gezeigt hast, die Einschränkung auch über den Code implementieren kann.

Sagen wir, ich müsste die Einschränkung über ein Query machen, dann wäre es ja (auch in deinem Fall) wieder nur ein Delegieren zum DataLayer.

Erstellt vor 13 Jahren

Hallo,

das heißt du hättest deinen Datenzugriff direkt im ServiceLayer? Dieser sollte eigentlich nicht wissen, wie die Daten geholt werden.

Erstellt vor 13 Jahren

Moin,

kurze Frage weil ich hier immer darüber stolpere.

Meine Persistenzschicht besteht aus einem GenericDao<T> und konkreten Dao's die davon ableiten.

Nehmen wir mal an, im UI habe ich die Möglichkeit nach Mitarbeitern zu suchen die mit einem bestimmten Buchstaben anfangen.

Was ist hier nun Best Practise? Ich benötige ja sowohl eine Service als auch eine Dao-Methode.

Natürlich könnte z.B. _employeeService.GetEmployeesStartsWith("A") intern nur _employeeDao.GetEmployeesStartsWith("A") aufrufen die wiederrum per NHibernate den Query absetzt.

Aber das ist doch unschön.

Wie löst ihr sowas?

Danke.

Erstellt vor 13 Jahren

Guten Morgen,

da ich nun "leicht" genervt bin, habe ich mich durchgerungen hier mal dieses komische Verhalten darzustellen.

Ausgangspunkt:

  • ASP.NET 4.0 WebSite mit vielen Pages und Controls
  • Zu jeder WebSite und jedem Control gibt es eine .resx sowie eine .en.resx Datei
  • Die .resx soll der Fallback sein (in meinem Fall deutsch)

Erstmal vorne weg, die Anwendung läuft ohne Probleme, auch das Umschalten zwischen deutsch und englisch funktioniert.

Nun zum Problem:
Beim Starten / Attachen des Debuggers kommen ca. 8000 Zeilen der Meldung 'A first chance exception of type 'System.Globalization.CultureNotFoundException' occurred in mscorlib.dll'.
Das beeinträchtigt den Debug-Start enorm! (ca. 3 Minuten)

Je größer die Seite (je mehr Resources), desto mehr dieser Fehler treten auf.

Die CurrentUICulture ist de-DE.

Danke im Voraus!

Erstellt vor 14 Jahren

Guten Morgen,

es geht um folgende Klasse:


    public class ClientGroup : DomainObject
    {
        public string Name { get; set; }
        public UniqueList<Client> Clients { get; private set; }

        public ClientGroup( string name )
        {
            Name = name;
            Clients = new UniqueList<Client>();
        }

        public override bool Equals( object obj )
        {
            if( base.Equals( obj ) ) // Hier wird DomainObject.Equals() aufgerufen, die einen Typ-Vergleich macht
            {
                if( ReferenceEquals( this, obj ) )
                {
                    return true;
                }

                ClientGroup clientGroup = obj as ClientGroup;

                return Name.Equals( clientGroup.Name ) && ... // Was nun?
            }

            return false;
        }

        public override int GetHashCode()
        {
            // Und hier?
            return Name.GetHashCode() ^ Clients.Count;
        }
    }

Ich möchte gerne den Namen sowie die Listenelemente vergleichen.
Wenn ich aber Clients.Equals(clientGroup.Clients) prüfe, wird ja object.Equals() und damit nur ReferenceEquals aufgerufen, aber KEIN Wertevergleich der Listenelemente.

Hat jemand von euch eine Idee wie man auf Gleichheit der Listenelemente prüft?
Sonst müsste ich mir ne Helper-Methode schreiben, was ich in diesem Fall eigentlich umgehen möchte.

PS: Wer oberes gelöst hat, darf mir auch gleich noch verraten, wie man dazu noch GetHashCode implementiert 😉

Dankeschön!

Erstellt vor 14 Jahren

Weder noch, es handelt sich um eine ASP.NET Anwendung. (Aber sollte das nicht irrelevant sein?)

Businesslogik sollte am besten in die Domain oder nicht?

Wie würde es denn in der Praxis aussehen?


// Aufruf aus einer ASPX-Page?
gridView.DataSource = Repository<Customer>.GetAll();

// Oder aus dem Domänenobjekt?
gridView.DataSource = Customer.GetAll();

public IList GetAll()
{
  return Repository<Customer>.GetAll();
}

Wenn ich es so wie oben mache, würde das UI quasi direkt auf die Persistence zugreifen, was vermutlich nicht sinnvoll ist.

Im zweiten Fall wäre die Domain schlechter testbar, weil das Repository nicht mehr so einfach zu mocken ist.

Wie löst du sowas?