Laden...
O
ossmoos myCSharp.de - Member
programmierer schweiz Dabei seit 16.11.2006 27 Beiträge
Benutzerbeschreibung

Forenbeiträge von ossmoos Ingesamt 27 Beiträge

24.07.2009 - 12:53 Uhr

Danke für die Antwort. Dann werde ich generell eine andere Lösung suchen...

24.07.2009 - 08:29 Uhr

Hallo zusammen

Ich habe folgendes Problem:

Ich kann im Code eine Konfiguration aus einer Datei laden:

ExeConfigurationFileMap map = new ExeConfigurationFileMap();
map.ExeConfigFilename = this.configurationPath;
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);

Nun möchte ich die Configuration allerdings nicht über eine Datei landen, sondern direkt aus der Datenbank. Ist dies möglich? Ich konnte noch keine vernünftige Lösung finden... Natürlich könnte ich die Werte aus der Datenbank in einer Datei speichern und dann einlesen - ist aber keine schöne Lösung...

Danke für jede Hilfe!

verwendetes Datenbanksystem: SQL Server 2005

30.10.2008 - 10:34 Uhr

Okey, ich habs begriffen, wenigstens Ansatzweise...

Ich habe in meinem Programm grundlegende Fehler gemacht:
Statt die Workerprozesse ansynchron laufen zu lassen, habe ich im GUI Thread auf diese mittles einer while Schleife gewartet und mit DoEvents() das GUI am leben erhalten.

Nun starte ich den Workerprozess aus dem GUI Thread heraus und starte danach einen System.Windows.Forms.Timer welcher alle 50 ms nachsieht ob der Worker Thread die Arbeit erledigt hat. Wenn dies soweit ist, wird die GUI auktualisiert.

Nun habe ich auch eine super Performance, da wie ich mir schon dachte, die meiste Zeit nur gewartet wurde und die vielen Warte-Schlaufen den Prozessor ausgelastet haben!

Danke für die vielen Tipps!

29.10.2008 - 19:35 Uhr

Bevor ich meinen ganzen Code umschreibe noch eine kurz Frage:

Wenn jedes meiner Contols in einem einzelnen Thread läuft, habe ich aber schon mehr als einen einzelnen GUI-Thread, denn jedes Contol hat GUI-Elemente welche den Status anzeigen. Was allerdings nicht für die WinForm zutrifft, denn diese darf sich nur nicht sperren (damit man den Thread der Contols stoppen kann).

Die Kommunikation zwischen ThreadPool und deiner WinForm wird über die Status-Klasse gemacht. Die GUI greift mit einem Timer auf die Status-Klasse zu und holt sich alle x-Millisekunden die aktuellen Werte.

Das bedeutet, dass die Status-Klasse dann wiederum das GUI des Controls mittels Invoke steuert?

29.10.2008 - 08:02 Uhr

Okey... Ich werde mich wohl noch etwas in die Materie einarbeiten müssen.... Ich denke dass ich noch viel Performance rausholen kann, denn die Prozessorzeit wird haupsächlich in den Warteschlaufen verbraucht!
Danke erstmals, werde dann sicher auch meine Lösung posten!

28.10.2008 - 23:22 Uhr

Ich begreife dass nicht ganz...
Ich müsste dann ja ein Event erstellen, dass nach dem definierten Interval aufgerufen wird und müsste den Timer stoppen. Aber der Timer würde ja dynamisch generiert... da ich ja mehrere Threads parallel betreibe... Oder habe ich da was falsch verstanden...??? 🤔

28.10.2008 - 22:32 Uhr

aha... Na auf sowas währe ich nicht gekommen...

Du meinst also sowas wie:

while ((!isCanceled) && (threadsInUse > 0))
{
timer.Interval=50;
timer.Start();
Application.DoEvents();
} 

Blockiert das dann nicht das UI?

28.10.2008 - 21:51 Uhr

Hallo zusammen

Ich habe eine Applikation geschrieben, welche ähnlich wie IE oder Firefox mehrere Instanzen im selben Programm ermöglicht.

Jede Instanz wird in einem eigenen Thread gestartet.

In jeder Instanz wird dann ein neuer Thread erstellt, welcher die Arbeit macht:

Thread downloadThread = new Thread(new ParameterizedThreadStart(DownloadSelected));
downloadThread.SetApartmentState(ApartmentState.STA);
downloadThread.Start(threadParams);

while ((!isCanceled) && (downloadThread.IsAlive))
{
    Thread.Sleep(5);
    Application.DoEvents();
}

In der Methode DownloadSelected werden dann bis zu 5 parallele neue Threads gestartet:

Thread downloadThread = new Thread(new ParameterizedThreadStart(DownloadWebsite));
downloadThread.SetApartmentState(ApartmentState.STA);
downloadThread.Start(threadParams);

Da ich an mehreren Stellen Schleifen wie:

while ((!isCanceled) && (threadsInUse > 0))
{
Thread.Sleep(5);
Application.DoEvents();
}

Eingebaut habe, habe ich nun Performance Probleme - ich denke jedenfalls, dass dies das Problem sein könnte...

Gibt es keine Bessere Lösung als ständig die Schleifen einzubauen und Application.DoEvents(); aufzurufen?

Danke für eine Antwort!

17.05.2008 - 19:02 Uhr

Erstmal Danke für die Antworten. Wie ich mir dachte, ist das ganze nicht ganz so simpel!

Es geht eigentlich darum, eine möglichst kleine Installationsdatei zu verschicken und mittels IsAvailable() zu prüfen, ob die MSHTML verfügbar ist. Ist dies nicht der Fall, wird die Komponente automatisch heruntergeladen und eben mittels ErsatzKomponentenWrapper geladen.

Eigentlich klar was ich zu tun habe, aber wie schreibe ich: MshtmlsWrapper oder ErsatzKomponentenWrapper?
Das verstehe ich nicht... ist dies ein manuelles laden der DLL?

Danke

16.05.2008 - 19:23 Uhr

Hallo

Folgendes Problem: Die Software, die ich vertreibe, verwendet die Komponente Microsoft.mshtml als Referez. Auf meiner Kiste hat dies natürlich immer funktioniert, auf anderen (vereinzelten) PC's bekam ich Fehlermeldungen, die darauf zu schliessen lassen, dass die Komponente nicht verfügbar ist (obwohl .NET 2.0 installiert war)...

Meine Frage(n):

  1. Ist es möglich, die Existenz dieser Komponente wärend der Laufzeit zu prüfen? 2. Fals sie nicht existiert, kann man den Pfad der Referenz während der Laufzeit ändern (auf eine heruntergeladene dll)?

Ich bedanke mich jetzt schon für deine Hilfe!

15.04.2008 - 07:59 Uhr

Nach gründlichem suchen fand ich heraus was das Problem war. Während der Installation der Komponente wurden die Registry Einträge nicht richtig erstellt. Desshalb konnte die Komponente nicht geladen werden!

Danke für die Hilfe.

14.04.2008 - 16:43 Uhr

Also die erste Fehlermeldung kriege ich bei der erwähnten Komponente (SaferPay Client):

Object reference not set to an instance of an object. 
[NullReferenceException: Object reference not set to an instance of an object.]
   com.saferpay.Client.Configuration.GetDefaultPath() +76
   com.saferpay.Client.Configuration..ctor() +79
   com.saferpay.Client.Context..ctor() +126
   com.saferpay.Client.MessageFactory..ctor() +34
   System.Web.UI.Control.OnLoad(EventArgs e) +132
   System.Web.UI.Control.LoadRecursive() +65
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2603

Wenn ich in der Messagebox nicht sage "break" sondern "continue" geht der Compiler weiter zum nächsten Methode

Server.Transfer(RedirectPage);

Dann bekomme ich den Fehler:

An exception of type 'System.Web.HttpException' occurred in System.Web.dll but was not handled in user code
Additional information: Error executing child request for WaitPage.aspx.

Anscheinend habe ich nicht ein Problem mit der Komponente sondern ein generelles Problem??

Kurz zu meiner Situation: Ich bin am migrieren einer rel. grossen Webapplikation von .NET 1.1 nach .NET 2.0 und geichzeitig von Windows Server 2003 32 Bit zu 64 Bit.

14.04.2008 - 16:26 Uhr

Danke für die schnellen Antworten! Ich dachte mir auch schon, dass die 1.1er Komponente laufen müsste... Leider tut sie dies (noch) nicht! Jetzt weis ich zumindest, wonach ich nicht mehr suchen muss X(

14.04.2008 - 15:50 Uhr

Hallo

Eine kurze Frage an die Experetenrunde:

Ist es möglich eine .NET 1.14 Komponente in einer .NET 2.0 Webapplikation zu verwenden? (x64 Server)

Danke für eure Hilfe!

19.11.2007 - 13:46 Uhr

Genau das habe ich gesucht! Funktioniert wunderbar!! Ein grosses Dankeschön von ossmoos!

14.11.2007 - 09:11 Uhr

Ok... habe gemerkt was falsch ist... Ich muss die Controls wärend dem Page_Load laden, damit die Eventhandler richtig geladen werden...

14.11.2007 - 08:51 Uhr

Hallo Peter. Danke für deine Antwort! Ich denke dies ist genau das was ich brauchte!!

Leider habe ich jetzt ein anderes Problem....

Während eines Postbacks prüfe ich diverse Dinge. Wenn eine dieser Prüfungen nicht true zurückgibt, lade ich (wärend des Postbacks) die Webcontrols. Irgendwas ist da jetzt aber faul mit den Eventhaldlern... Wenn ich den Linkbutton anklicke, geht der Debuger nicht durch den Code des Webcontrols, sondern nur durch den Page_Load-Code der aufrufenden Seite...?? Muss ich, wenn ich wärend eines Postbacks Contols lade, irgendwelche Eventhandler manuell registrieren??

Danke für eine Antwort!!

13.11.2007 - 16:34 Uhr

Hallo. Ich habe eine Seite welche eine unbestimte Anzahl Webcontrols (.ascx) lädt. In diesen Webcontols befindet sich ein Linkbutton, welcher einen Postback mit CommandArgument's auf der aufrufenden Seite ausführt...

Im Webcontrol habe ich ja dann foldenden Code:

LinkButtonID.Command += new CommandEventHandler([AufrudendeSeite??].CityLink_Click);

Wie mache ich das?

Ich habe hier etwas gefunden, hilft mir aber leider auch nicht weiter...
http://msdn2.microsoft.com/de-de/library/ms178139(VS.80).aspx

Ich hoffe jemand kann mir helfen bei meinem Problem...

27.04.2007 - 14:22 Uhr

Wenn man nach dieser Fehlermeldung im Forum oder auch im Internet sucht, findet man eigentlich überhaupt keine Lösung.... Habe dann aber die Protokollierung des SMTP Servers aktiviert und mal nachgesehen was denn so geschieht.... Da seh ich doch einen Eintrag mit meinem Computernamen und der hat doch tatsächlich ein UMLAUT drin!!!! Lösung: Computer umbenennen, neu booten und alles funktioniert!!! Manchmal kanns schon ganz fies sein... 🤔

26.04.2007 - 21:24 Uhr

Hallo

Wenn ich eine Email via den SMTP Dienst des IIS sende, kriege ich immer die folgende Fehlermeldung:

"Email konnte nicht gesendet werden via smtp-Server localhost Empfänger: ich@mail.de. System.Net.Mail.SmtpException: Failure sending mail. ---> System.FormatException: An invalid character was found in the mail header."

Diese Meldung kriege immer!!! Was könnte der Grund sein? Hat irgendjemand eine Ahnung?

Mein Code:


// werte aus xmldatei auslesen
mailFrom = ((Xml.XMLMailSettings)returnList[0]).sendEmailFrom;
mailTo = ((Xml.XMLMailSettings)returnList[0]).sendEmailTo;
smtpServer = ((Xml.XMLMailSettings)returnList[0]).smtpServer;
smtpServerPort = ((Xml.XMLMailSettings)returnList[0]).smtpPort;
smtpUserName = ((Xml.XMLMailSettings)returnList[0]).smtpUserName;
smtpPassword = ((Xml.XMLMailSettings)returnList[0]).smtpPassword;

// wenn mehrere mailadressen angegeben wurden, diese aufsplitten
if (mailTo.Contains(";"))
    mailToAddresses = mailTo.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries);
else
{
    mailToAddresses = new string[1];
    mailToAddresses[0] = mailTo;
}

// email erstellen
MailMessage Email = new MailMessage();
MailAddress MailFrom = new MailAddress(mailFrom, mailFrom, System.Text.Encoding.UTF8);
Email.From = MailFrom;
for (int i = 0; i < mailToAddresses.Length; i++)
{
    Email.To.Add(mailToAddresses[i]);
}
Email.Subject = subject;
Email.Body = message;
Email.BodyEncoding = System.Text.Encoding.UTF8;
Email.SubjectEncoding = System.Text.Encoding.UTF8;

// smtp client erstellen
SmtpClient SmtpMail = new SmtpClient(smtpServer, smtpServerPort);
if ((smtpUserName != "") && (smtpPassword != ""))
    SmtpMail.Credentials = new NetworkCredential(smtpUserName, smtpPassword);
SmtpMail.EnableSsl = false;

// email senden
try
{
    SmtpMail.Send(Email);
    WriteEventLog("Email erfogreich via smtp-Server " + smtpServer + " gesendet an: " + mailTo, EventLogEntryType.Information);
    return true;
}
catch (Exception ex)
{
    WriteEventLog("Email konnte nicht gesendet werden via smtp-Server " + smtpServer + " Empfänger: " + mailTo + ". " + ex, EventLogEntryType.Error);
    return false;
}

14.12.2006 - 22:01 Uhr

Danke für die Antwort! Diese Lösung gefällt mir schon besser... Werde dies mal versuchen - aber erst gehts in die FERIEN!!! 8)

10.12.2006 - 21:40 Uhr

Hallo

Den Connect-Timeout habe ich jetzt über die Threads gelöst. Ich starte also den Test-Connect in einem eigenen Thread und prüfe nach 200 ms ob der Thrad noch läft. Wenn nicht, war der Test erfolgreich. Falls der Thread noch läuf, warte ich nochmal 500 ms und prüfe den Thread nochmals (isAlive). Danach breche ich den Connect-Thread ab.
Dies ist ziemlich umständlich, aber diese Methode funktioniert wenigstens...

public bool TestConnection(ArrayList connectList)
    {
        try
        {
            Thread connectThread = new Thread(new ParameterizedThreadStart(Connect));
            connectThread.Start(connectList);

            Thread.Sleep(CONNECT_TIME);
            if (!connectThread.IsAlive)
            {
                socket.Close();
                return true;
            }
            else
                Thread.Sleep(CONNECT_TIME_OUT);

            if (connectThread.IsAlive)
                connectThread.Abort();

            socket.Close();
            return false;
        }
        catch (SecurityException ex)
        {
            return false;
        }
        catch (Exception ex)
        {
            return false;
        }
    }

    private void Connect(object connectList)
    {
        IPHostEntry hostInfo = Dns.GetHostEntry((string)((ArrayList)connectList)[0]);
        System.Net.IPEndPoint remoteIP = new System.Net.IPEndPoint(hostInfo.AddressList[0], (int)((ArrayList)connectList)[1]);
        socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        socket.Connect(remoteIP);
    }
10.12.2006 - 09:37 Uhr

Danke für deine Antwort. Werde dein Lösungsansatz auch gleichmal ausprobieren - nach den Weihnachtseinkäufen...
Aber ist denn dies wirklich eine saubere Lösung des Problems? Im google findet man 100te von Einträgen zu diesem Thema - aber wie gesagt, eine Lösung konnte ich nicht finden... Währe ein Lösungsansatz über eine asynchrone connection??

09.12.2006 - 22:38 Uhr

Hallo

Ich suche jetzt schone eine ganze Weile nach einer Lösung, hab sie aber leider bis jetzt nicht gefunden.
Ich möchte verschiedene Server über IP / Port auf verfügberkeit testen.

IPHostEntry hostInfo = Dns.GetHostEntry(ip);
System.Net.IPEndPoint remoteIP = new System.Net.IPEndPoint(hostInfo.AddressList[0], port);
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

Wenn ein Server nicht verfügbar ist, dauert die connect-Methode viel zu lange.
Mit der folgenden Einstellung bringe ich die Timeout-Zeit auch nicht runter:

socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, CONNECT_TIME_OUT);

Gibt es wirklich keine Lösung für dieses Problem??

16.11.2006 - 21:20 Uhr

ich habe es nun doch nochmals versucht - habe wie oben beschrieben die klasse / struktur und die 2 funktionen serialize und deserialize in ein eigenes projekt getan und die dll in den 2 projekten server und client integriert... und es hat geflutscht!!! DANKE!! 👍 😁

16.11.2006 - 17:18 Uhr

danke für die schnelle antwort!!
dies dachte ich erst auch, habe diese klasse in beiden projekten erstellt. dies sollte also nicht das problem sein... ich habe auch, wie in anderen foren beschieben, ein projekt serializer erstellt mit den funktionen serialize und deserialize. die dll habe ich dann in beide projekte integriert - aber ohne erfolg (gleiche fehlermeldun) X(

16.11.2006 - 16:47 Uhr

hallo erstmal.

ich hoffe irgendjemand kann mir helfen....
folgende situation: ich baue gerade eine client- server applikation, ich versuche seit einer weile daten vom server zum client zu schicken.

class Server
{
....
[Serializable]
public class temp
{
public string text;
public int zahl;
public bool wahr;
}

    public void send()  
    {  
                    ArrayList tempList = new ArrayList();  

                    temp entry = new temp();  
                    entry.text = &quot;test&quot;;  
                    entry.zahl = 1;  
                    entry.wahr = false;  
                    tempList.Add(entry);  

                    MemoryStream stream = new MemoryStream();  
                    BinaryFormatter binFormatter = new BinaryFormatter();  

                    binFormatter.Serialize(stream, tempList);  
                    byte[] arrToSend = stream.GetBuffer();  

                    socket.Send(arrToSend);  
    }  

}

dies funktioniert noch ganz gut, aber:

Class Client
{
ArrayList returnList;

    buffer = clsCommunicate.Receive();  
    if (buffer != null)  
    {  
        MemoryStream stream = new MemoryStream(buffer);  
        BinaryFormatter binFormatter = new BinaryFormatter();  
        returnList = (ArrayList)binFormatter.Deserialize(stream);  
    }  

}

bei: returnList = (ArrayList)binFormatter.Deserialize(stream);
bekomme ich den fehler "Die Assembly Server, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null kann nicht gefunden werden."

wenn ich die gleichen daten schicke ohne sie vorher in eine struktur zu schreiben, funktioniert das ganze prächtig. was ist der grund für diese fehlermeldung????