Laden...
Avatar #avatar-2142.jpg
LordHexa myCSharp.de - Member
Azubi FI-Awe Nähe Hameln Dabei seit 15.09.2006 55 Beiträge
Benutzerbeschreibung

Forenbeiträge von LordHexa Ingesamt 55 Beiträge

19.11.2009 - 13:03 Uhr

Hallo zusammen,

ich habe bereits die Suchfunktion benutzt, aber leider nichts passendes für mein Problemfall gefunden oder nichts gefunden, das meiner Meinung nach mein Problem lösen könnte.

Folgendes Szenario:
Ich habe ein Webportal auf dem man nach Produkten suchen kann. Die Suchergebnisse liefert mir eine externe API. Diese API gibt mir einen Array Products[] zurück. Products[] besitzt Objekte names Product mit z.B. diesen Eigenschaften: ProdID, Title, Price, Description. Leider bietet mir die API nur die Möglichkeit, das die Ergebnisse nach Title oder Price sortiert werden. Intern sucht die API das übergebene Suchtwort in Title und Description. Daraus resultiert natürlich, das die Ergebnisqualität, gelinde gesagt, suboptimal ist.

Die Lösung:
Ich erstelle mir ein eigenes Object names AdvancedProduct welches von Product erbt und um die Eigenschaft RelevancePoints erweitert wird. Wie diese RelevancePoints ermittelt werden ist für das Problem nicht relevant.

Das Problem:
Ich möchte nun mein Object AdvancedProduct in Products[] übergeben. Dies allerdings Absteigend nach RelevancePoints sortiert. Und genau hier stehe ich grad auf dem Schlauch.

Sollte etwas unverständlich sein, bitte nachfragen 😃

Beste Grüße

22.08.2007 - 19:25 Uhr

Hi filsinn,

was bedeutet "doch das Speichern funktioniert nicht" denn genau?
Bekommst du eine Exception?
Bist du sicher das du den Wert auch geändert hast?

Bestimmt hast du das Ganze auch schon debugged und er die Bedingung if (set.Name == "TestSetting1"😉 ist true?! =)

Greetz

04.08.2007 - 21:48 Uhr

Hi, vielleicht hilft dir das weiter:


object MyFunc(Type T, String Str)
{
return Convert.ChangeType(Str, T);
}

28.06.2007 - 11:03 Uhr

Hallo zusammen,

ich habe ein CMS, welches bei Strator gehostet wird. Diesem CMS ist von Strator ein Load-Balancer vorgeschaltet.

Nun habe ich in dem CMS ein Monitoring-Tool, wechles ich mit diversen Daten füttere. Das Problem ist, das durch den Balancer alle Client-IPs, die bei meinem Monitoring-Tool landen, logischerweise die IP des Balancers bekommen. Was mir ja nun nicht wirklich viel hilft.

Gibts es eine Möglichkeit, ähnlich wie bei PHP mittels $_SERVER["HTTP_X_FORWARDED_FOR"]

die Client-IP zu bekommen?

Vielen Dank

31.05.2007 - 13:32 Uhr

Original von Loewchen0507
Dann nur noch eine Frage, gibt es eine Möglichkeit in einem dienst zu debuggen? Also in Einzelschritten? Wenn ja wie???

Hallo Loewchen,

ja diese Möglichkeit gibt es!
Um dies zu realisieren solltest du einen Sleep in deinem Dienst aufrufen, am besten gleich nach dem onStart-Event. 20 Sekunden sollten hierbei ausreichend sein.
Du startest deinen Dienst wie gewohnt und gehst in VS über Debuggen->An den Prozess anhängen und wählst dort deinen Prozess aus.

Greetz

31.05.2007 - 11:11 Uhr

Hi Maximus,

System.DirectoryServices sollte dir da weiter helfen. Alle Hosts in einer Windows-Domäne kannst du dann zum Beispiel so ermitteln:


DirectoryEntry DomainEntry = new DirectoryEntry("WinNT://");
//DomainEntry.Children.SchemaFilter.Add("computer");

foreach (DirectoryEntry host in DomainEntry.Children)
{

29.05.2007 - 09:49 Uhr

Hallo BelZebuB,

vielleicht hilft dir das Snippet hier ja schon weiter:


DirectoryEntry DomainEntry = new DirectoryEntry("WinNT://");
//DomainEntry.Children.SchemaFilter.Add("Computer");

foreach (DirectoryEntry host in DomainEntry.Children)
{

Greetz

29.05.2007 - 09:38 Uhr

Hallo cybercube,

was genau ist jetzt deine Frage?
Ich sehe mehrere Fragen, die sich leider nicht mit 2-3 Sätzen, zusammenhängen, beantworten lassen.

Greetz

22.05.2007 - 17:01 Uhr

Hoffe das hilft dir weiter =)


config = ConfigurationManager.OpenExeConfiguration(getConfigName);
confGroup = config.SectionGroups.Get("applicationSettings");
section = confGroup.Sections.Get("TollesProgramm.Properties.Settings") as ClientSettingsSection;

und schon kannst du per


SettingElement myElement = new SettingElement();
myElement.Name = "newElement";
section.Settings.Add(myElement)

ein Element hinzufügen. Anschließend speichern und fertig 🙂

22.05.2007 - 16:28 Uhr

Also ich hab es auch schon anders, als über die generierte Settings-Klasse lösen können. Inetwa so sollte es aussehen:


config = ConfigurationManager.OpenExeConfiguration(getConfigName);
//oder auch per OpenMappedExeConfiguration

confGroup = config.SectionGroups.Get("applicationSettings");
section = confGroup.Sections.Get("TollesProgramm.Properties.Settings") as ClientSettingsSection;

Auslesen könnte dann z.B. per foreach von Statten gehen

foreach (SettingElement element in section.Settings)
{
07.05.2007 - 12:34 Uhr

Hallo zusammen,

ich habe ein Programm geschrieben und nutze für die Konfiguration eine user.config.
Diese Konfig-Datei wird nach dem erstellen wiederrum von einem anderen Programm ausgelesen und für dessen Konfiguration genutzt.

Leider kann das Programm, welches die user.config auslesen soll dies nicht tun und wird durch eine ConfigurationErrorsException beendet. Meine Fehlersuche brachte mich dahin, das in der user.config keine configSection geschrieben wird.

Ich frage mich nun wie das passieren kann?

Hat jemand eine Idee?
Falls Codesnippets erwünscht sind, geb ich diese gerne raus

Vielen Dank!

04.05.2007 - 16:18 Uhr

Ok, also ich habe mir nun Zugriff auf die Datei, mit folgenden Mitteln, beschafft:


 ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
      fileMap.ExeConfigFilename = @"meine.exe.config";

      Configuration myConfig = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);

      ConfigurationSection mySection = config.Sections.Get("Meine.Properties.Settings");

So, nur habe ich das Problem, das mySection Null ist, obwohl es die von mir angegebene Section definitv gibt. Hinzu kommt, da ich die config-Datei per Clear leere kann, er also in der Richtigen Datei sein muss...

04.05.2007 - 14:21 Uhr

Eventuell ist mein Vorhaben ja noch leichter umsetzbar.
Gibt es eine Möglichkeit an dieser Stelle:


 
    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")]
    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
        
        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
        
        public static Settings Default {
            get {
                return defaultInstance;
            }
        }

defaultInstance einfach die von mir gewünschte *.config anspricht?

04.05.2007 - 13:47 Uhr

Ok, klingt einleuchtend.

Bin mir nicht sicher, ob ich eventuell erwähnen sollte, das die config Datei die ich ansprechen will, nicht die Programmeigene ist und ich diese sowohl lesen, als auch schreiben können muss. Macht das einen Unterschied?

04.05.2007 - 12:33 Uhr

Hallo zusammen,

vorab bin noch nicht so fortgeschritten was konvertierungen etc. angeht =)

Ich möchte gerne den Inhalt einer app.config-Section als Settings nutzen und dies versuche ich folgendermaßen zu realisieren:

 ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
      fileMap.ExeConfigFilename = "C:\\PreCompiler2.exe.config";
      Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
      Settings set = config.GetSection("PreCompiler2Setup.Settings") as Settings;

Bekomme die Fehlermeldung: Der Typ "Typ1" kann nicht über eine integrierte Konvertierung in "Typ2" konvertiert werden.

So, an sich verstehe ich wohl den Inhalt der Meldung, aber nicht wie ich dies beheben kann 🙁

Wäre für Hilfe sehr dankbar!

So long,
LordHexa

16.03.2007 - 12:09 Uhr

Kann mir wirklich niemand sagen, wie ich am einfachsten eine Section wie die appSettings erstelle und dort werte eintragen kann? X(

15.03.2007 - 10:24 Uhr

Ich habe mein Beispiel oben noch mal editiert, vielleicht lässt sich das Ganze so besser lesen =)

13.03.2007 - 13:58 Uhr

Das ist richtig, aber "schöner" sind benannte dann doch. Kommt natürlich immer ganz drauf an, aber anonyme Methoden sind beim Lesen des Codes, von Dritten, kein schöner Anblick 🙂

13.03.2007 - 13:45 Uhr

Also, ich würde dir raten, das du dir mal etwas zum Thema ParameterizedThreadStart aus der MSDN zu gemüte führst. Wo auch immer das dort oben her stammt: vergiss es 😉

per ParameterizedThreadStart kann das Ganze dann z.B. so aussehen:


ParameterizedThreadStart ts = delegate(object myObject)
          {
            MyClass.myMethod(Parameter);
          };

13.03.2007 - 12:47 Uhr

Bislang hab ich es eben noch nicht hinbekommen, eine Section zu erzeugen und diese Section mit Elementen zu füllen. Elemente erzeugen hat geklappt, aber nicht eine Section "drumherum".

Wie schon oben erwähnt

<section>
<element>inhalt1</element>
<element>inhalt2</element>
<element>inhalt3</element>
<element>inhalt4</element>
</section>

Ich benötige dazu also 2 Dinge, 1. Wie legt man eine Section an und 2. Wie bekomme ich die Section mit Elementen befüllt.

Hier der entsprechende Schleifenaufruf


XmlDocument aXD = new XmlDocument();
aXD.Load(configFile);

foreach (object Filename in getFilelist)
{
  if (!String.IsNullOrEmpty(username) && !String.IsNullOrEmpty(password))
  {
     WriteConf.ConfigurationSettings.Save(url + Filename.ToString() + "?username=" + username + "&password=" + password, aXD);
   }
   else
   {
      WriteConf.ConfigurationSettings.Save(url + Filename.ToString(), aXD);
   }
}
      
WriteConf.ConfigurationSettings.reader.Close();

Das hier wird von der foreach aufgerufen


XmlNode newElem = aXD.CreateNode("element", "url", "");
newElem.InnerText = url;
XmlElement root = aXD.DocumentElement;
root.AppendChild(newElem);

13.03.2007 - 12:30 Uhr

Ja, also ich bekomm's schon soweit hin, dass in meiner app-conf sowas in dieser Art steht:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
...
</configSections>
<applicationSettings>
<PreCompiler.Properties.Settings>
...
</PreCompiler.Properties.Settings>
</applicationSettings>
<userSettings>
<PreCompiler.Properties.Settings>
...
</PreCompiler.Properties.Settings>
</userSettings>
<url>http://www.domain1.de</url>
<url>http://www.domain2.de</url>
...
</configuration>

die <url>-Elemente? schreib ich via Schleife dort rein und will jetzt nur einfach um die <url>-Elemente eine Sektion erzeugen lassen, quasi:

Section öffnen, Elemente schreiben, Section schließen, fertig

13.03.2007 - 12:11 Uhr

Also, ich möchte etwas in der Art erzeugen:

<urlsection>
<url>www.domain1.de</url>
<url>www.domain2.de</url>
<url>www.domain3.de</url>
<url>www.domain4.de</url>
<url>www.domain5.de</url>
</urlsection>

oder

<urlsection>
<url value="www.domain1.de" />
<url value="www.domain2.de" />
<url value="www.domain3.de" />
<url value="www.domain4.de" />
<url value="www.domain5.de" />
</urlsection>

Kommt darauf an was sich später besser auslesen lässt.

Ich muss dazu sagen ich bin mir nicht sicher ob ich die richtigen Bezeichnungen benutzt habe, da XML noch Neuland für mich ist

13.03.2007 - 11:39 Uhr

Hallo zusammen,

habe eine App die ein Config-File erzeugt, welches dann später von einer anderen App ausgelesen wird.

Ich muss nun eine Art Custom-Section erzeugen und dort mehrere Elemente einbringen.
Leider finde ich nichts Brauchbare im Netz, bzw. nichts, was diesen Fall behandelt.

Das Ganze ist notwendig, weil ich in einem späteren Schritt die Elemente innerhalb der Custom-Section verschlüsseln will/muss. Was eventuell noch eine weitere Frage mit sich führen könnte, aber ich wäre erstmal froh, wenn meine erste Frage auf Antworten stoßen wird =)

09.03.2007 - 13:18 Uhr

Update:

Weg mit Semaphoren! Mache das Ganze nun doch per WaitCallBack und QueueUserWorkItem 👍

09.03.2007 - 09:35 Uhr

Also bislang laufen die Request sauber durch und ich durchschnittlich 200 Threads offen.

Gelöst habe ich es jetzt doch mit Semaphoren, einziges Problem das ich noch habe ist, dass sich kurz nach dem Start kaum Threads aufbauen (10-20), nach 1-2 Minuten werden es dann jedoch mehr, also soviele das ich die 250er Grenze greift. Woran kann das denn liegen?

09.03.2007 - 00:58 Uhr

Naja, ich könnte das Ganze auch in z.B. 10er Threads ablaufen lassen. Daraus würde sich jedoch ebentuell das Problem ergeben, dass der Dienst Ewigkeiten läuft und an dieser Stelle sollte ich erwähnen, das der Dienst alle 20 Min erneut die Verarbeitung startet. Sollte ich also noch einpaar mehr URLs und somit Threads bekommen, würde sich das Ganze wahrscheinlich irgendwann "aufschaukeln".

08.03.2007 - 16:27 Uhr

Auf den ersten Blick schien mit Semaphore einfacher und leichter zu sein, mit einem Threadpool hatte ich es mal versucht, nur funktionierte das nicht so wie es sollte. Außerdem war zu diesem Zeitpunkt nicht davon die Rede, das über 1000 URLs verarbeitet werden sollen und ich mich somit auch nicht mit Out-Of-Memory rumärgern musste. Somit habe ich den Threadpool einfach mal weg gelassen.

08.03.2007 - 16:18 Uhr

Das nicht ungebingt 🙂

Gelesen habe ich das schon, nur bin ich davon ausgegangen, das ich mein Vorhaben auch mit Semaphoren gewerkstelligen kann.

08.03.2007 - 16:07 Uhr

So, also besagtes Brett ist immer noch vorhanden.

Ich habe es mit der Semaphore versucht, wie folgt instanziiert:

Semaphore threadwaiter = new Semaphore(250, 250);

und diese dann, siehe Code oben, wie folgt angewandt:


foreach (string URL in arrText)
        {
          ParameterizedThreadStart ts = delegate(object threadURL)
          {
            Uri Url = new Uri(Convert.ToString(threadURL));
            Fire Split = new Fire();
            Split.split_uri(Url);
          };

          Thread thread = new Thread(ts);

          threadwaiter.WaitOne();

          thread.Start(URL);
          threads.Add(thread);

          threadwaiter.Release();
          
        }

Leider wird der threadwaiter aber ignoriert, denn es laufen weit über 250 Threads.
Was zur Folge hat das ich Out-Of-Memory laufe. Genau das Problem möchte ich ja dadurch beheben, dass ich nur 250 Threads gleichzeitig laufen lasse

Könnte mir bitte jemand das Brett entfernen?! =(

08.03.2007 - 12:36 Uhr

Na da hätte ichja auch drauf kommen können, aber da hing wohl grad das Brett vorm Kopf 🤔

Trotzdem natürlich danke!

08.03.2007 - 10:10 Uhr

Hallo zusammen,

ich habe einen Win-Dienst der zum Aufrufen von Websites dient (Genauer Grund ist soweit irrelevant). Gefütter wird der Dienst aus einem Text-File, welches die aufzurufenen URL beinhaltet. Der Dienst arbeitet mit Multithreading, in dem Fall ein Thread pro URL aus dem Text-File.

Nun sammeln sich jedoch immer mehr URLs in dem Textfile und beinhalten nun > 1000 Stk., somit werden eine ganze Menge Threads gestartet und der Dienst frisst sich mit Resourcen voll.

Meine Frage ist nun, wie ich es realisieren kann die URLs "häppchenweise" zu verarbeiten. Meinetwegen 250 Stk., wenn diese 250 Threads abgearbeitet sind die Nächsten usw..

Hier die beiden wichtigsten Funktionen, die für dieses Arbeits-Splitting von Bedeutung sind. Zumindest schätze ich das mal 😉

Threads aus URL-File erzeugen:


internal void readURLs()
    {
      
      string sLine = "";
      int sumURLs = 0;

      try
      {
        StreamReader objReader = new StreamReader(URLFile);
        ArrayList arrText = new ArrayList();

        while (sLine != null)
        {
          sLine = objReader.ReadLine();
          if (!String.IsNullOrEmpty(sLine))
          {
            arrText.Add(sLine);
          }
        }
        objReader.Close();

        sumURLs = arrText.Count;

        List<Thread> threads = new List<Thread>(sumURLs);

        foreach (string URL in arrText)
        {
          ParameterizedThreadStart ts = delegate(object threadURL)
          {
            Uri Url = new Uri(Convert.ToString(threadURL));
            Fire Split = new Fire();
            Split.split_uri(Url);
          };

          Thread thread = new Thread(ts);
          
          thread.Start(URL);
          threads.Add(thread);
        }
        WaitForAll(threads);
      }

      catch (Exception exc)
      {
        string error = exc.ToString();
        logging.writeLog(error, "info");
        throw;
      }

      finally
      {
        logging.writeLog(Configuration.placeholder, "info");
        Precompiler2Service.initFire(Interval);
      }
    }

Waiter-Funktion:


private static void WaitForAll(IEnumerable<Thread> threads)
    {
      foreach (Thread thread in threads)
      {
        if ((thread.ThreadState & ThreadState.Running) == ThreadState.Running)
        {
          thread.Join();
        }
      }
    }

16.01.2007 - 15:37 Uhr

System.Threading.ParameterizedThreadStart ts = delegate(object _URL)
          {
            Fire.split_uri(Convert.ToString(_URL), UserAgent);
          };

So besser? Wenn nicht, ich bekomm langsam Kopfweh =)

16.01.2007 - 15:28 Uhr

Nein, das ist nicht der komplette Code. Der gesamte aus allen 5 Klassen sind ca. 460 Zeilen. Welche Stelle wäre denn noch interessant?

16.01.2007 - 15:19 Uhr

System.Threading.ParameterizedThreadStart ts = delegate(object _URL)
          {
            Fire.split_uri(URL, UserAgent);
          };

Dieser Methodenaufruf gilt aber doch pro Thread oder nicht? split_uri() ruft dann im weiteren Verlauf "Request.FireRequest(URI, UserAgent, username, password);" auf und in der Mehtode FireRequest, der Klasse Request wird der WebRequest (wreq) erzeugt.

Hm, verstehe nicht so ganz wo das Problem sitzt 🙁

16.01.2007 - 15:07 Uhr

Die Exc. erfolgt an der markierten Stelle


try
      {
        //Rebuild the URI to avoid Exceptions or other kinds of Errors
        Uri cleanURL;
        Uri.TryCreate(URL, UriKind.Absolute, out cleanURL);
      }
      catch (WebException webexception)
      {
        logging.writeLog("Precompile throw Exeption: " + Convert.ToString(webexception) + "\r\n", "error");
        logging.writeLog("Fehler beim Erstellen der URI, bitte URLs in der urls.txt prüfen!\r\n", "error");

        return;
      }

      if (wreq.Method == "GET")
      {
        //Fire the Request
        HttpWebResponse wres = (HttpWebResponse)wreq.GetResponse();
      }
      else
      {
        //Fire the Request
        HttpWebResponse wres = (HttpWebResponse)wreq.GetResponse(); <------

        wres.Close();
      }

Das was in der gesamten Klasse passiert, aus der dieser Snippet ist, soll von jedem Thread mit der entsprechenden URL gemacht werden. Wenn ich aber lock verwende, würd ich ja eine Wartschlange erzeugen und könnt mir das Threading ja gewissermaßen sparen oder seh ich das falsch?

16.01.2007 - 14:59 Uhr

Naja, ob jetzt noch irgendein Parameter doppelt "gelesen" wird, kann ich durch besagt Exception nocht nicht sagen 😉

16.01.2007 - 14:44 Uhr

So, die Änderung brachte mich wieder zu einem Fehler, den ich bereits in der Vergangenheit hatte. Ich bekomme die Exception:

BeginGetRequestStream/BeginGetResponse kann nicht erneut aufgerufen werden, wenn ein vorheriger Aufruf noch verarbeitet wird.

Grund ist mir soweit klar, nur nicht wie ich das am schönsten/besten behebe

Momentane Methode:



    internal static void readURLs()
    {
      try
      {
        string sLine = "";
        int sumURLs = 0;

        StreamReader objReader = new StreamReader(URLFile);

        //Debug
        logging.writeLog("URLFile in Fire_It: " + URLFile, "error");

        ArrayList arrText = new ArrayList();

        while (sLine != null)
        {
          sLine = objReader.ReadLine();
          if (sLine != null && sLine != "")
          {
            arrText.Add(sLine);
          }
        }

        objReader.Close();

        sumURLs = arrText.Count;

        List<Thread> threads = new List<Thread>(sumURLs);

        foreach (string URL in arrText)
        {
          System.Threading.ParameterizedThreadStart ts = delegate(object _URL)
          {
            Fire.split_uri(URL, UserAgent);
          };

          Thread thread = new Thread(ts);
          thread.Start(URL);

          threads.Add(thread);
        }

        WaitForAll(threads);
        
      }

      catch (Exception exc)
      {
        //Log the Exception
        logging.writeLog(exc.ToString(), "error");
      }

      finally
      {
        logging.writeLog("Threads ordnungsgemäß beendet!", "info");
      }
    }
16.01.2007 - 14:19 Uhr

Ok, wie bereits im Edit erwähnt, werd ich mal versuchen das ganze Parametrized zu verwenden. Könnte vielleicht etwas dauern, da ich zum Einen noch C#-Anfänger und mich zum Anderen erst seit einpaar Tagen mit Threading auseinandersetze

16.01.2007 - 14:07 Uhr

Ok, hab mich da vielleicht nicht ganz korrekt ausegdrückt 🙂

Also, das was als Überladung aus dem Textfile kommt, wird nur für die weitere Verarbeitung (das was der Thread machen soll) benötigt.

Der Thread macht dann durchaus noch einige mehr und die Reihenfolge ist mir im Prinzip egal. Das Problem ist ja, das er den 1. und den letzten Wert aus dem Textfiel nimmt, die zweite Zeile wird schluckt.

EDIT: Ok, da war jemand schneller oder hat eher angefangen zu tippen =)

Werde es erstmal per ParametrizedThreadStart (wie Borg vorgeschlagen hat) und melde mich dann zurück!

Aber auch danke an svenson

16.01.2007 - 13:44 Uhr

Hallo zusammen,

ich schreibe grad an einer Anwendung. Dieser möchte ich die Arbeit mit Multithreading verkürzen. An und für sich werden auch Threads erstellt und deren Aufgabe (die bei jedem Thread die gleich ist) erfüllt. Um Ihre Aufgabe zu erfüllen, bekommen sie aus einer Textdatei einen String. Für jede sich in der Textdatei befindlich Zeile wird ein Thread gestartet und die auszuführende Methode hat als Überlagerung einen String.

So, das funktioniert auch schon fast, bis auf ein kleines Problem. Angenommen es sind 3 Zeile in der Textdatei Param1, Param2, Param3. Das Ergebnis, also wenn die Methode ausgeführt wurde, schreibe ich in eine Logdatei etwas wie "Param1 abgearbeitet, Param2 abgearbeitet" usw.. Tja, was steht nun in der Logdatei, wenn alles ausgeführt wurde? ....Richtig! "Param3 abgearbeitet, Param1 abgearbeitet, Param3 abgearbeitet".

Wo ist Param2 hin? Und Warum beginnt er mit Param3 ?

Achso, die Params bekommt der jeweilige Thread aus einem Array (Ja, ich starte eigentlich bei 0), das Programm nur nicht 😉

11.01.2007 - 00:39 Uhr

Hat sich erledigt. Arbeite seit ca. 3 Wochen in einer anderen Firma. Habe den Dienst zwar noch fertig gestellt, aber benöige ihn nicht mehr 🙂

Bitte entschuldigt, wenn ich einfach etwas zu "unerfahren" war...inzwischen ist der Dienst nach dem compilen knapp 50 KB groß (jaaa, ist nicht groß) und läuft mit Multithreading, nur um eine kurze Info über den Werdegang zu geben 😉

11.01.2007 - 00:35 Uhr

Hat sich erledigt. Das Problem besteht für mich nicht weiterhin, weil ich seit ca. 3 Wochen in einer anderen Firma arbeite! Möge sich der nächste damit rumschlagen 🙂

05.01.2007 - 19:22 Uhr

Also ich hab bisher meine Configfiles im XML-Format benutzt, leider noch nicht die settings. Mit den XML-Files gab's bislang noch keine Probleme und die konnte man auch, sofern man es benötigt, wunderbar zur Laufzeit verändern.

Bin mir auch nicht sicher, ob die Settings dazu geeignet sind, sie wärend die Anwendung läuft, zu ändern. Entschuldige die Nachfrage, aber den Dienst neugestartet, nach dem du die conf geändert hast, hast du sicher schon ausprobiert, richtig? 🙂

05.01.2007 - 16:58 Uhr

Scheint, also ohne den Code gesehen zu haben, so als wenn dein Service wohl, ohne ihn näher zu kennen, nicht so programmiert wurde, das er zur Laufzeit die Konfiguration ausliest. Wenn du sie innerhalb der OnContinue oder gar OnStart Methode einliest, kann es nicht funktionieren. Du könntest eine Methode schreiben, die per Timer die Konfiguationsdatei liest und anschließend erneut OnContinue, mit den neuen Werten, anstößt.

Sollte ich falsch liegen, dann wird es eventuell daran liegen, das ich 1. kaum Info zu deinem Dienst hab udn 2. auch noch nicht sehr lang (3 Monate) mit C# zutun habe 😉

27.12.2006 - 16:04 Uhr

Ja, im Browser (FF) funktioniert auch alles mit deaktiviertem JS. Gibt es denn noch andere Dinge, die ich vll nicht beachtet habe? Hätte vll erwähnen sollen, das ich mich erst seit ca. 2 Monaten mit C#.Net beschäftige 😉

27.12.2006 - 15:46 Uhr

Ja, musste leider meine Antwort editieren, sorry

27.12.2006 - 15:39 Uhr

Also, vll nenn ich einfach mal die Seite, um die es sich handelt:

www.werliefertwas.de

Mein Programm, Konsolen-App, erfragt ein Suchwort und erstellt aus

string postData = "http://www.wlw.de/sse/MainServlet?sprache=de&land=DE&anzeige=produkt&suchbegriff=" + inputSearch;

den Uri und sendet die einfach.

Dabei kommt der Streamreader am Ende zu folgender Ausgabe:

....
src="http://wlwde.122.2O7.net/b/ss/wlwde/1/H.2--NS/0"
height="1" width="1" border="0" alt="" /></noscript><!--/DO NOT REMOVE/-->
<!-- End SiteCatalyst code version: H.2. -->
</body>
</html>

Vielleicht habe ich in dem JS-Wirrwarr ja etwas übersehen =)

27.12.2006 - 14:51 Uhr

Hallo zusammen,

ich habe ein kleines Programm geschrieben, welches ganz einfach einen suchbegriff an eine Suchemaschine postet und dann den Quelltext des Suchergebnisses per Streamreader auslesen soll. Das Problem ist nun leider, das diese Suchmaschine ohne aktiviertes Javascript keine Ergebnisse liefert.

Vorab: Nein, ich kann keine andere Suchmaschine verwenden, ergo: ich komm um das Problem nicht rum =)

09.11.2006 - 16:00 Uhr

Ah! Danke, ich werd's mal ausprobieren.

Ok, da war jemand schneller. Die Problematik ist, das ich sicherlich Stunden brauche, um in dem Code das flasche / zu finden. In dem Code sind sämtliche HTML-Elemente per Response.Write eingebettet (Ja, man sollte den Verantwortlichen töten) und die Attribute werden nunmal ala': width=&quot;100%&quot; angegeben. Nein, es gibt nicht ein Element das CSS verwendet, jedenfalls soweit ich das momentan sehen kann.

09.11.2006 - 14:48 Uhr

Naja, das alte Problem von IE und Firefox, die HTML-Code nicht gleich pingelich verarbeiten. Die Webanwendung X erstellt HTML-Code (dieser ist verdammt umfangreich) und X erzeugt irgendwo ein "/" zu viel, was dort nicht hingehört. Der IE ignoriert dieses und der Code läuft sauber durch. Doch der FF stört sich an diesem Slash und X wirft eine Exception. Ich kann noch nichts genaueres zu diesem Problem posten, da ich grad noch bei der Fehleranalyse bin.