Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von schuppsl
Thema: Setup-Projekt - Lizenzvertrag - greift nicht auf rtf-Datei zu
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Vielen Dank, hat geholfen, war gerade schon am Verzweifeln...grrr.

Thema: Datei einlesen, verändern und wieder schreiben
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallöle.

Also ich habe hier eine binäre Datei, für die ich keine Beschreibung habe.
Ich lese diese mit dem BinaryReader ein und bekomme lauter cryptische Zeichen.

Gehe im im Debugger auf HTMl-Ansicht, wird mir der eingelesene Stream als Text angezeigt, so ich ich es eigentlich haben möchte.

Wie kann ich das auf normalem Wege machen?

 FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);//Datei öffnen
            byte[] byteData = new byte[fs.Length];
            fs.Read(byteData,0, (int) fs.Length);
            fs.Close();
       

            System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
            string erg =  enc.GetString(byteData);


Edit: Das as ich so einlese sieht so aus:
02\0.\00\0/\S\0e\0r\0a\0t\0o\0 \0c\0r\0a\0t\0...usw
Das ist doch Hex oder?
Wenn ich das Ganze mit BigEndianUnicode kodiere, kann ich es fast lesen...sind noch ne Menge chinesischer Zeichen drin, teilweise wid es aber sichtbar...


Ok wie es scheint ist die Datei UTF 8 Kodiert:

 StreamReader reader = new StreamReader(path);

            Encoding enc = reader.CurrentEncoding; // == UTF8

Nur, wie kann ich das umwandeln?

Thema: Allgemeiner Fehler in GDI+, aber unter Windows XP
Am im Forum: Web-Technologien

Hey Mars.

Vielen Dank an Deinen Hinterkopf!
Habe es nun mit .gif versucht und damit geht es auf Anhieb auf dem XP Rechner.

Vielen Dank, das hätte ich sonst nicht so schnell herausgefunden!

Grüßle

Thema: Allgemeiner Fehler in GDI+, aber unter Windows XP
Am im Forum: Web-Technologien

Hallo Profis.

So, jetzt wirds ewas kompliziert.
Ich erstelle in meiner ASP.NET Anwendung auf einer Seite dynamische Grafiken, welche per HttpHandler erzeugt wird.

In der web.config habe ich dazu einen neuen Handler registriert:

<add verb="*" path=".tmbn" type="MEINPROJEKT.V5.thumbnails"></add>

D.h. also alle Images, welche per ImageUrl auf einen Pfad wie in meinem Fall

src=".tmbn/img=|0|0|1|5"
zugreifen, werden mit diesem handler dynamisch erzeugt.

Dieser Handler sieht u.a so aus:


public class thumbnails : IHttpHandler
    {
......

 public void ProcessRequest(HttpContext context)
        {
......

            int areaSize = 28;
            Color colVor = Color.FromArgb(rgbcolorVor);
            Color colNach = Color.FromArgb(rgbcolorNach);


            System.Drawing.Bitmap flag = new System.Drawing.Bitmap(areaSize, areaSize);

            Graphics graf = Graphics.FromImage(flag);
            graf.Clear(Color.White);           
            
            SolidBrush brushVor = new SolidBrush(Color.FromArgb(200,colVor));
            SolidBrush brushNach = new SolidBrush(Color.FromArgb(200, colNach));


            for (int x = 0, y = flag.Width - 1; x < flag.Height; ++x, --y)
                flag.SetPixel(y, x, Color.Gray);


            Point[] pNach = new Point[3];
            pNach[0] = new Point(0, areaSize);
            pNach[1] = new Point(areaSize, 0);
            pNach[2] = new Point(areaSize, areaSize);
            graf.FillPolygon(brushNach, pNach);

            Point[] pVor = new Point[3];
            pVor[0] = new Point(0, areaSize);
            pVor[1] = new Point(areaSize, 0);
            pVor[2] = new Point(0, 0);
           graf.FillPolygon(brushVor, pVor);
            


           graf.DrawString(Adds.KALENDERKUERZEL[vor] == "--" ? "" : Adds.KALENDERKUERZEL[vor], new Font("Arial", 8), new SolidBrush(Color.Black), 0, 0);
           graf.DrawString(Adds.KALENDERKUERZEL[nach] == "--" ? "" : Adds.KALENDERKUERZEL[nach], new Font("Arial", 8), new SolidBrush(Color.Black), 10, 15);

            context.Response.ContentType = "image/png";
            flag.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Png);


Ich denke das wichtigste ist die letzte Zeit in der die Grafik direkt in den Response geschrieben wird.

rgbcolorNach und rgbcolorVor sind integer, welche die Farben enthalten.


Das Ganze funktioniert auf einem Windows 7 Rechner einwandfrei, jedoch unter Windows XP überhaupt nicht.
D.h. die Grafiken werden nicht erzeugt und die Fehlermeldung lautet:

Fehler
05.08.2011 09:52:13: Application_Error : Current Request File Path: ~/funktionen/.tmbn Exception: System.Runtime.InteropServices.ExternalException: Allgemeiner Fehler in GDI+.
bei System.Drawing.Image.Save(Stream stream, ImageCodecInfo encoder, EncoderParameters encoderParams)
bei System.Drawing.Image.Save(Stream stream, ImageFormat format)
bei MEINPROJEKT.V5.thumbnails.ProcessRequest(HttpContext context) in E:\source\V5N\MEINPROJEKT.V5\MEINPROJEKT.WEB\thumbnails.cs:Zeile 171.
bei System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
bei System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
05.08.2011 09:52:13: Fehler-URL: http://localhost:7750/funktionen/.tmbn/img=|0|52|0|1
Source: System.Drawing
Message: Allgemeiner Fehler in GDI+.
Stack trace: bei System.Drawing.Image.Save(Stream stream, ImageCodecInfo encoder, EncoderParameters encoderParams)
bei System.Drawing.Image.Save(Stream stream, ImageFormat format)
bei MEINPROJEKT.V5.thumbnails.ProcessRequest(HttpContext context) in E:\source\V5N\MEINPROJEKT.V5\MEINPR.WEB\thumbnails.cs:Zeile 171.
bei System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
bei System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Current Request File Path: ~/funktionen/.tmbn

Woran könnte das liegen, daß es unter Windowx XP (SP3) nicht funktioniert ?
GDI+ ist doch standardmäßig mit intstalliert auf XP...

Danke und Grüße schuppsl

Thema: [gelöst] Imagemap --> Hotspot Attribut geben
Am im Forum: Web-Technologien

Uralt der Thread, aber gleiches Problem.

Ich habe es mit einem Benutzerdefinierten Steuerelement versucht, da ich beim Hotspot einen (gültigen) onmouseover benötige, den MS wohl irgendwie vergessen hat.

Mein Versuch bisher:



 public class myPoly : HotSpot
    {

        private string _onmouseover;
        private string _coords;
        private string _href;
        private string _title;
        private string _alt;
       
        /// <summary>
        /// Onmouseover Event
        /// </summary>
        public string onmouseover { get { return _onmouseover; } set { _onmouseover = value; } }

        /// <summary>
        /// Coords
        /// </summary>
        public string coods { get { return _coords; } set { _coords = value; } }

        /// <summary>
        /// HREF
        /// </summary>
        public string href { get { return _href; } set { _href = value; } }

        /// <summary>
        /// Title
        /// </summary>
        public string title { get { return _title; } set { _title = value; } }

        /// <summary>
        /// Alternative Text
        /// </summary>
        public string alt { get { return _alt; } set { _alt = value; } }



        public override string GetCoordinates()
        {
            return coods;
        }

        protected override string MarkupName
        {
            get { return "poly"; }
        }





        protected  void RenderContents(HtmlTextWriter writer)
        {
            string myWriter = String.Format("<area shape='{0}'" +
                                "coords='{1} '" +
                                "href='{2}'" +
                                "title='{3}'" +
                                "alt='{4}'" +
                                "onmouseover='{5}'", MarkupName, coods, href, title, alt, onmouseover
                                );
writer.Write(myWriter);
         

        }    


         
    }

Wäre ja alles schön und gut, aber RenderControls wird nicht aufgerufen,also kann ich auch nicht in das Steuerelement eingreifen.

Eigentlich bräuchte ich nur einen HotSpot mit zusätzlichem onmouseover.

Wie kann man das, außerhalb der o.G. Lösung noch machen, bzw. was ist an meinen Steuerelement oben falsch?
Ausgegeben wirds, nur ohnr onmouseover...

EDIT: also RenderContents gibt es beim HotSpot nicht.

Thema: Probleme beim Builden
Am im Forum: Web-Technologien

Was sagt denn das Ausgabefenster?

Thema: Bitmap aus graphics Object erzeugen?
Am im Forum: Grafik und Sound

Hallo Leute.

Es handelt sich um eine ASP.NET Anwendung.

Also ich zeichen ein Dreieck in einem graphics Objekt und würde gerne dieses als png oder sows abspeichern:



  Graphics graf = Graphics.FromImage(flag);
            graf.Clear(Color.White);
 Point[] p = new Point[3];
            p[0] = new Point(100, 200);
            p[1] = new Point(150, 100);
            p[2] = new Point(200, 200);
          
            graf.DrawPolygon(new Pen(Color.Red, 3), p);

Nur wie gehts jetzt weiter?
ich benötige eine Datei "meinedatei.jpg" die ich später ganz normal aufrufen kann....

Danke und Grüße schonmal

Thema: SQL und ASP.NET´: Fehler im UPDATE Befehl?
Am im Forum: Datentechnologien

Hi, danke.
Leider diesselbe Fehlermeldung:

Fehler
Syntaxfehler in UPDATE-Anweisung.


EDIT: habs herausgefunden.
STRING ist natürlich ein reserviertes Wort und darf nicht verwendet werden. :(

EDIT: Ist eigentlich sinnvoll wenige Daten in einer DB zu speichern, oder sind da doch Textdateien sinnvoller?

Thema: SQL und ASP.NET´: Fehler im UPDATE Befehl?
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: Access (?)

Hallo,ich habe bisher alle Daten in Dateien zwischengespeichert und mache nun erste Versuche mit Datenbanken in meiner ASP.NET Anwendung.

Dazu habe ich einfach eine Access Tabelle angelegt und ins Projekt eingefügt.
(city.mdb)

Einiges Funktioniert schon, einiges aber auch nicht.
Meine Mini Tabelle sieht so aus:

Spalten: ID und STRING
und eine Reihe: FTDELTAGE(ID) und 100(STRING)

Also pubseinfach.

Jetzt steht also in der Reihe FTDELTAGE der Wert 100 drin.

Diesen Wert möchte ich nun ändern, per UPDATE Befehl, das sieht so aus:



 string neuBerTage= txtNeuBerTage.Text;

            try
            {
                OleDbConnection myConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|city.mdb");

                OleDbCommand myComm = new OleDbCommand("UPDATE city SET [email protected] WHERE ID=FTDELTAGE", myConn);
                        

                myConn.Open();
                myComm.ExecuteNonQuery();
                myConn.Close();
            }
            catch (Exception ex)
            {
                string gmess = ex.Message;
            }

Also der UPDATE Befehl lautet also:
UPDATE city SET [email protected] WHERE ID=FTDELTAGE

Die Fehlermeldung lautet: "Fehler im UPDATE Befehl."

Ich habe ihn schon tausendmal geändert und auch sogar auf meine Datenbank im www, per PHPmyAdmin die tabelle nachgebaut und den Befehl übernommen: Gleicher Fehler.


Was ist also an diesem simplen Befehl falsch?

Danke

Thema: Feststellen ob localhost oder Client?
Am im Forum: Web-Technologien

Alles klaro, danke.

Thema: Feststellen ob localhost oder Client?
Am im Forum: Web-Technologien

Alles klaro.

Wo kann man die Impelentierung ansehen?
Danke.

Thema: Feststellen ob localhost oder Client?
Am im Forum: Web-Technologien

Ja wir reden vo asp.net.

IP Vergleichen bin ich auch schon drauf gekommen, bin aber überzeugt, daß es schon was "fertiges" gibt.
Danke, werde ich mal versuchen.

Thema: Feststellen ob localhost oder Client?
Am im Forum: Web-Technologien

Hi, ich suche schon seit Stunden nach einer Möglichkeit festzustellen ob ich bei einer Anfrage auf dem localhost bin oder ob die Anfrage von einem Client kommt.
Naja, vielleicht war ich ja zu lange im Urlaub:-)

Wie kann ich das machen?
Danke

Thema: KeyDown-Event "global" abfangen
Am im Forum: GUI: Windows-Forms

Danke.

Thema: [erledigt] Listview wird nach .Clear() nicht mehr neu gezeichet
Am im Forum: GUI: Windows-Forms

DANKEEEEEEEE

Thema: [erledigt] Listview wird nach .Clear() nicht mehr neu gezeichet
Am im Forum: GUI: Windows-Forms

Hallöle.

Man eine Newbie Frage zu einem anderen Thema.
Ich bin ja sonst asp.net progger, muss aber für nen Kunden ein kleinen Windows.Forms Progrämschen bauen. Der Kollege ist im Urlaub, kann den also nicht fragen:-)


Also ich lese ganz einfach Daten aus einer Textdatei und liste diese in einer Windows Form in ein Listview.

Geht perfekt, sortieren geht auch schon.

Jetzt bin ich dabei nen Filter zu klöppeln, wo es noch hakt.
Also Textfeld und Button eingebaut, bei Klick auf den Button wird einfach die Itemkollection durchlaufen und festgestellt, ob der Suchtext irgendwio vorkommt.

Geht auch soweit.

Jetzt möchte ich das Ergebnis natürlich auch darstellen und vorher das Listview löschen um dann die gefilterten items einzufügen.

Das Clear geht, aber danach werden keine Daten mehr angezeigt.

also hier mal Quellcode:

 private void btnFilter_Click(object sender, EventArgs e)
        {

            ListView.ListViewItemCollection coll = new ListView.ListViewItemCollection(listBuchdat);
            coll = listBuchdat.Items;


            foreach (ListViewItem item in coll)
            {
               ListViewItem.ListViewSubItemCollection subColl = item.SubItems;
               ListViewItem.ListViewSubItem myItem = new ListViewItem.ListViewSubItem(item, txtFilter.Text);



               for (int i = 0; i < subColl.Count; i++)
               {
                   if (subColl[i].Text == txtFilter.Text) 
                   {
                       ListViewItem listItem = new ListViewItem(subColl[0].Text);   //Name
                       listItem.SubItems.Add(subColl[1].Text);                      //Ausweis
                       listItem.SubItems.Add(subColl[2].Text);                      //Datum  
                       listItem.SubItems.Add(subColl[3].Text);                      //Uhrzeit
                       listItem.SubItems.Add(subColl[4].Text);                      //Buchart
                       aItem.Add( listItem);
                   }
               } 
                
            }

           

        
            listBuchdat.Clear();
            UpdateListView();
             
        }


        private void UpdateListView()
        {
            ListViewItem[] items = (ListViewItem[])aItem.ToArray();
            listBuchdat.Items.AddRange(items);
            listBuchdat.Update();
        }

Also das aItem ist so definiert:

List<ListViewItem> aItem = new List<ListViewItem>();    

Ich speichere die Daten also zwischen und klopfe sie dann mit UpdateListView wieder rein.
vorher lösche ich das mit Clear().

Gelöscht wirds, aber die Daten kommen nicht wieder rein...
Ich habe noch einen anderen Button, der die Hauptfunktion aufruft die auch beim Start aufruft, die das Listview füllt.
Klicke ich diesen, werden die Daten immer und immer wieder eingetragen, was ja auch klar und gut so ist.
Mache ich vorher Clear() ist das Listview leer und wird nicht mehr mit Daten gefüllt.
Also irgendwas ist da mit Clear...

Was mache ich falsch?

Thema: Windows Service mit ASP.NET stoppen und starten
Am im Forum: Web-Technologien

Ja, ist ja eigentlich schon logisch.

Habe inzwischen eine .exe gebaut, welche ich per

     System.Diagnostics.Process.Start(pfad);
aufrufe und die den Server neu startet...funzt.

Grüßle

Thema: Windows Service mit ASP.NET stoppen und starten
Am im Forum: Web-Technologien

Hallo, mal wieder was spezielles.

In meiner ASP.NET Anwendung möchte ich dem Admin die Möglichkeit geben, den Webserver (cassini) neu zu starten.
Ich habe auch eine Windows Forms Anwendung mit der das einwandfrei funktioniert, nur mit der ASP.NET Anwendung nicht.

Der Dienst wird zwar beendet, aber nicht mehr neu gestartet.
Der einzige Unterschied zwischen der Forms und ASP Anwendung der mir einfällt ist, daß die Forms Anwendung als Administrator bzw. als User mit Admin Rechten ausgeführt wird.
Die ASP Anwendung ja nicht.

Trotzdem ist es seltsam, daß der Dienst trotzdem gestoppt wird, also denke ich mir, daß es nicht daran liegt.
Eher daran, daß die ASP Anwendung den Dienst einstellt, sobald der Webserver auf der sie läuft beendet wird.
Ist ja auch mehr als logisch, aber die Funktion zum Stop und Start sollte doch trotzdem noch ausgeführt werden, auch ohne Webserver...ist ja Codebehind und hat nichts mit der Oberfläche zu tun...

Hängt das doch so zusammen?

Schon, gell?

Wie kann man das dann lösen?


Hier der Code:


   public void RestartService(string serviceName, int timeoutMilliseconds)
     {         

         ServiceController service = new ServiceController(serviceName);
         try
         {
             int millisec1 = Environment.TickCount;
             TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds);
             clog.WriteLine("--Service hier", false);
             if (service.Status == ServiceControllerStatus.Running)
             {  
                 service.Stop();
               

                 service.WaitForStatus(ServiceControllerStatus.Stopped, timeout);
      

             }


             // count the rest of the timeout
             int millisec2 = Environment.TickCount;
             timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds - (millisec2 - millisec1));

             service.Start();
             service.WaitForStatus(ServiceControllerStatus.Running, timeout);



         }
         catch (Exception ex)
         {

             // ...
             throw new Exception(ex.Message, ex.InnerException);
             
         }
     }


Edit: jetzt stimmt der Code

Thema: Visual Web Developer 2010 Express->Resourcen
Am im Forum: Web-Technologien

Hallöle.

Also jetzt stehe ich irgendwie gerade gewaltig auf dem Schlauch.

Ich teste gerade VS2010 EXPRESS und habe eine GlobalResource angelegt.
Aus dieser möchte ich nun ein paar Strings extrahiere, wie halt bisher auch:

Also Ordner APP_GlobalResources angelegt und darin eine Resourcendatei.

Codebehind z.B.

Zitat
throw new Exception(Resources.error.MLD_clientIFSocketNotExists);

Dann das gemeckere:
Fehler
Fehler 6 Der Name "Resources" ist im aktuellen Kontext nicht vorhanden.

Normalerweise kann ich damit ja schon etwas anfangen, aber hier irgendwie nicht.
warum kann ich nicht auf die Resourece zugreifen?
Mache ich dasselbe mit VS8 (Prof) geht das ohne Probleme...

liegts an der Express Version?

Thema: [gelöst] ASP.NET Anwendung vorkompilieren->Globa-Resources benötigt
Am im Forum: Web-Technologien

Hallöle.

Also ich spiele gerade mit dem Compiler herum (VS8) und möchte in Zukunft meine ASP.NET Anwendung vorkompiliert an den Kunden vergeben.

Das teste ich gerade und habe mir eine Batchdatei gebastelt, welche folgendermaßen die Anwendung kompiliert:

Zitat

C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler -nologo -f -p E:\source\V5N\xxx.V5\xxx.WEB -v / E:\source\V5N\xx.V5\compout


Rufe ich die Anwendung mit dem IIS auf, dann geht es teilweise.
Es kommen aber ständig Fehlermeldungen, daß er irgendwas nicht finden kann, was eindeutig mit Javascript zusammenhängen muss.
Dann habe ich für ein spezielles Control im Ordner App_GlobalResources eine Datei Namens Schema.xml, welches er auch vermisst, wird also nicht mitkompiliert.

Ist ja auch klar, denn dieser Ordner wird ja nicht benötigt, trotzdem brauche ich diese Datei.(Die in diesem Ordner liegen muss)

Lege ich diesen an und kopiere die Schema.xml da rein kommt:
Fehler
Das Verzeichnis /App_GlobalResources/ ist unzulässig, da die Anwendung vorkompiliert ist


Also irgendwas läuft da gründlich schief.
Jetzt ist die Frage, wie sinnvol das ganze Unterfangen generell ist und ob ich falsche Kommandozeilenparameter angegben habe o.ö.

Vielen Dank!


EDIT: Also es liegt definitiv an dieser XML Datei, die anscheinend im Ordner Globas_Resources liegt MUSS.
Liegt die da drin, kommen keine Fehlermeldungen.

Bei einer vorkompilierten Seite kann ich diesen Ordner aber nicht anlegen.
Kann man das irgendwie lösen?


EDIT: (Nr.482374):-)
Hat sich erledigt, ich kann den Pfad zu dieser Datei (natürlich) angeben.

Bitte schließen!

Thema: C# ASP.NET Webanwendung dynamische Buttons
Am im Forum: Web-Technologien

Ohne den Quellcode jetzt genauer angesehen zu haben:
Kannst Du nicht CommandArgument auslesen?

Weitere Dinge:

- Du muss jedem dynamisch erstellten Button eine eindeutige ID vergeben.

- Du könntest ein Hiddenfield einbauen (statisch) und dieses beim Klick auf einen Button mit einem Wert befüllen, den Du dann im ClickEvent ausliest.

Thema: [gelöst] ASp.NET TCPClient: Socket schließt nicht !
Am im Forum: Netzwerktechnologien

Das hat anscheinend geholfen:
Lösung
Danke!

Thema: [gelöst] ASp.NET TCPClient: Socket schließt nicht !
Am im Forum: Netzwerktechnologien

Hallo, ich bin mal wieder echt am verzweifeln!
In einer neu angelegten ASP.NET Applikation nehme ich per TCPClient zu unserer Software mit verschiedenen Sockets Kontakt auf.
Wie in meine bisherigen ASP.NET Anwendung auch!

Ich habe nun festgestellt, daß die erstellten Sockets irgendwann nicht mehr geschlossn werden können..in der neuen Anwendung!

Natürlich habe ich alle Socketfunktionen aus der bisherigen Anwendung hergenommen und verwende diese in der neuen App auch.

Zur Anmerkung: In der alten App läuft alles perfekt, die Sockets werden erstellt und auch ordnungsgemäß geschlossen, daran gibts nichts zu rütteln.

Da dies in der neuen nicht geht, habe ich mal die Erstellung und Schließung der Sockets aufs Minimalste reduziert zum Test:



if (!Page.IsPostBack)
            {


            TcpClient tcpCl = new TcpClient();
            TcpClient tcpClIF = new TcpClient();
            tcpClIF = new TcpClient(CGlob.USE_IPV6 ? AddressFamily.InterNetworkV6 : AddressFamily.InterNetwork);
            tcpCl = new TcpClient(CGlob.USE_IPV6 ? AddressFamily.InterNetworkV6 : AddressFamily.InterNetwork);

            try
            {
                tcpCl.NoDelay = true;
                tcpCl.ReceiveTimeout = 2000;
                tcpCl.SendTimeout = 500;
                tcpCl.ReceiveBufferSize = 8191;
                tcpCl.SendBufferSize = 8191;
                tcpCl.Connect(CGlob.APP_SERVER, CGlob.APP_DATAPORT);



                tcpClIF.NoDelay = true;
                tcpClIF.ReceiveTimeout = 2000;
                tcpClIF.SendTimeout = 500;
                tcpClIF.ReceiveBufferSize = 8191;
                tcpClIF.SendBufferSize = 8191;
                tcpClIF.Connect(CGlob.APP_SERVER, CGlob.APP_PORT);

            }
            catch (Exception ex)
            {
                string mess = ex.Message;
            }
            finally
            {

                tcpCl.Client.Close();
                tcpClIF.Client.Close();
            }
}

Also die TCPCLients werden erstellt, machen einen Connect und werden wieder geschlossen.
Per TCPView und in der Software verfolge ich das Ganze.

Die Variablen für APP_Server usw (localhost) sind ausgefüllt.

Der Connect wird immer korrekt ausgeführt, nur der Close danach nicht.
Debugge ich das Ganze und vergleich den Sockethandle usw. scheint es zu funktionieren.
Aus diesem Grund hatte ich vor jedem Close schon einen Thread.Sleep(1000), was aber auch nichts nützt, es geht dann halt etwas länger.


Mache ich nur einen Socket auf, wird dieser anstandslos wieder geschlossen, nur sobald es zwei sind, gibt es diese Probleme.
Dabei ist es egal, ob die nacheinander erstellt werden und dann nacheinander geschlossen oder ob die erst erstellt-geschlossen--erstellt-geschlossen werden.

Bei Zwei TCPClients wird nach kurzer Zeit einer nicht mehr geschlossen!
Das ist eine minimale ASP.NET Seite und ich teste das, indem ich die Startseite im Browser einfach immer und immer wieder aufrufe.

Wie gesagt mit meiner bisheringe Software geht das so ohne die geringsten Probleme, deshalb verstehe ich das hier nicht.

Warum werden die Sockets, bzw., jeweils einer nicht mehr geschlossen?
Habe auch schon Tests mit Networkstream.Close (MSDN) gemacht, nützt auch nichts.

Was stimmt hier nicht?
Danke an die Profis.

Thema: asp.net und Threads
Am im Forum: Web-Technologien

Hallo MarsStein,

das hatte ich schon versucht, hat aber nicht funktioniert, d.h. der Networkstream hat Blockiert...

Thema: asp.net und Threads
Am im Forum: Web-Technologien

Doch sind 15 Sekunden zu viel, war nur zum Test.
Ich denke 2 Sekunden dürften genügen.
Die Auswertung habe ich inzwischen gemacht.

Dann machen ich mich mal an den ThreadQueue:-)

Vielen lieben Dank für die Anmerkungen und Eure wertvolle Zeit!

Thema: asp.net und Threads
Am im Forum: Web-Technologien

Okidoki, aber ist das so wie oben gebräuchlich?

Thema: asp.net und Threads
Am im Forum: Web-Technologien

ok, das ist interessant!

Also es geht ja aktuell (wieder darum), daß ich per socket Daten von einer (eigenen) Software abfrage.
Habe schon viel mit stream.BeginRead usw versucht, aber nichts hilft wirklich.

Es ist so, daß die Software unter bestimmten Umständen zwar sendebereitschaft sendet, (vom Client aus gesehen also "es sind Daten zum Lesen vorhanden") dann aber nichts kommt.
Sollte zwar nicht so sein, ist aber (derzeit) noch selten der Fall.

In so einem Fall möchte ich eben die Socketabfrage in einem eigenen Thread starten und 2-3 Sekunden warten. KOmmt dann nichts, soll der Thread abgebrochen werden.
Mache ich das nicht so, blockiert der Socket bis zum Sankt Nimmerleins-Tag und die Webanwendung ist nicht mehr bedienbar, außer durch Abbruch.

Mit BeginRead sollte man sowas ja eigentlich machen können oder?
Habe aber keinen Erfolg damit.

Aktuell sieht mein Tread nun so aus:


ThreadStart t = new ThreadStart(cy.ReceiveT);
             Thread myT = new Thread(t);
             myT.Start();
             myT.Join(15000);
             myBack = cy.recErg;

Mit Join warte ich auf den Thread. Blockiert der Socket nach der verstrichenen Zeit nicht, soll der Thread abgebrochen werden.

Ist sowas (bis auf den Queue) praktikabel?

Wie groß ist denn der Threadpool eigentlich?

Wir haben bisher in unserer C++ Application (ISAPI-DLL) einen Threanqueue von 50 Threads, was bisher immer gereicht hat...

Thema: asp.net und Threads
Am im Forum: Web-Technologien

Zitat von Abt
Man muss aber dazu sagen, dass man sich um den Queue der Threads absolut selbst kümmern muss, da man ansonsten ganz schnell in eine MemoryException rutschen kann!
ThreadPool nimmt das einem ab.

Aber wenn ich einen erstellten Thread nach der Ausführung der Funktion wieder beende bzw abbreche dürfe doch nichts passieren, oder?

Thema: asp.net und Threads
Am im Forum: Web-Technologien

Zitat von Abt
Man muss aber dazu sagen, dass man sich um den Queue der Threads absolut selbst kümmern muss, da man ansonsten ganz schnell in eine MemoryException rutschen kann!
ThreadPool nimmt das einem ab.

...hatte da doch noch was im Hinterkopf =)

Thema: asp.net und Threads
Am im Forum: Web-Technologien

Also ich habe nun ein Snippet gefunden und angepasst:

 AutoResetEvent signal = new AutoResetEvent(false);

                       // Wird benötigt da ThreadPool verwendet wird:
                       Thread t = null;

                       // Durch diese Variante gibt es den Vorteil dass 
                       // die Worker-Methode nicht geändert werden muss.
                       ThreadPool.QueueUserWorkItem((o) =>
                       {
                           // Auf ThreadPool-Threads kann normalerweise nicht 
                           // zugegriffen werden. Mit diesem "Trick" gehts.
                           t = Thread.CurrentThread;

                           // Worker starten:
                           cy.ReceiveT(); 

                           // Benachrichtigen dass Worker fertig ist:
                           signal.Set();
                       });


            System.Threading.Timer tim = new System.Threading.Timer((o) => { signal.Set(); }, null, 5000, Timeout.Infinite);
            
            signal.WaitOne();

            if (t != null && t.IsAlive)
                t.Abort();

            
            string myBack = cy.recErg;

taugt das was oder nicht?
Es scheint ja zu funktionieren....

Aber sollte ich wirklich einen Thread vom Threadpool nehmen?