Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Asyncrone Übertragung via NamedPipeClient und Server C-Sharp

Frage Entwicklung VB for Applications

Mitglied: JKoenig

JKoenig (Level 1) - Jetzt verbinden

11.02.2012 um 08:42 Uhr, 3911 Aufrufe, 5 Kommentare

Schönen gute morgen, es heißt ja der frühe Vogel fängt den Wurm, nur bei Käfern hab ich da leider kein all zu großes Glück...

Ich habe eine Anwendung, welche aus zwei Separaten Anwendungen besteht: Eine reine Backup Anwendung ohne GUI etc., die zweite Anwendung ist ein GUI zur Konfiguration des Dienstes und einigen Backup-Related-Tools.

Die GUI soll Änderungen in der Konfiguration über NamedPipes an die Backup Anwendung übertragen.

Da das Backup geänderte Dateien (eventuell, je nach Einstellung) sofort Sichern soll kommt nur eine asynchrone Übertragung in Frage.

Beim Debuggen bricht die Methode, ohne eine Ausnahme zu werfen, in Zeile 40 (string data = streamReader.ReadLine();) ab.

01.
public class IPC 
02.
03.
    static Dictionary<string, List<string>> receivedData = new Dictionary<string, List<string>>(); 
04.
    static Dictionary<string, NamedPipeServerStream> pipeServers = new Dictionary<string, NamedPipeServerStream>(); 
05.
 
06.
    public static List<string> GetData(string pipe) 
07.
08.
        List<string> return_ = receivedData[pipe]; 
09.
        receivedData[pipe].Clear(); 
10.
        return return_; 
11.
12.
 
13.
    public static bool CheckData(string pipe) 
14.
15.
        return receivedData[pipe].Count > 0; 
16.
17.
 
18.
    public static void Receive(string pipe) 
19.
    {  
20.
        receivedData[pipe] = new List<string>(); 
21.
        object[] obj = new object[1]; 
22.
        obj[0] = pipe; 
23.
        pipeServers.Add(pipe, new NamedPipeServerStream(pipe, PipeDirection.InOut, 254, PipeTransmissionMode.Byte, PipeOptions.Asynchronous)); 
24.
        pipeServers[pipe].BeginWaitForConnection(new AsyncCallback(con), obj); 
25.
26.
 
27.
    public delegate void DataReceiveEventHandler(EventArgs e, List<string> data); 
28.
 
29.
    public static event DataReceiveEventHandler OnDataReceive; 
30.
 
31.
    private static void con(IAsyncResult res) 
32.
33.
        string pipe = ((string)((object[])res.AsyncState)[0]); 
34.
        NamedPipeServerStream pipeServer = pipeServers[pipe]; 
35.
        pipeServer.EndWaitForConnection(res); 
36.
        StreamReader streamReader = new StreamReader(pipeServer); 
37.
        List<string> lst = new List<string>(); 
38.
        while (true) 
39.
40.
            string data = streamReader.ReadLine(); 
41.
            lst.Add(data); 
42.
            receivedData[pipe].Add(data); 
43.
            if (data == null) 
44.
                break; 
45.
46.
        OnDataReceive(new EventArgs(), lst); 
47.
48.
 
49.
    public static void Send(string pipe, string data) 
50.
51.
        NamedPipeClientStream p = new NamedPipeClientStream(pipe);             
52.
        p.Connect(); 
53.
        StreamWriter w = new StreamWriter(p); 
54.
        w.WriteLine(data); 
55.
56.
}
Meine Frage ist nun warum er dort abbricht und wie ich ihn davon abhalten kann.

Grüße
JKoenig
Mitglied: DevTig
27.02.2012 um 14:08 Uhr
Hallo JKoenig,

bin zwar der Sprache C# nicht mächtig, aber unter VB.NET hilft in den meisten fällen, der einbau einer Try-Catch Routine.
Welche dann eine schöne Fehlermeldung auswirft mit der man dann weiter auf die Suche gehen kann.
01.
try { 
02.
    ...DAS_SOLL_ICH_TUN.... 
03.
04.
catch { 
05.
    ...WENN_FEHLER_WERFE_ES_HIER_AUS... 
06.
    }
Mehr dazu, wird hier erläutert http://msdn.microsoft.com/de-de/library/0yd65esw.aspx

Grüße
DevTig
Bitte warten ..
Mitglied: JKoenig
27.02.2012 um 14:35 Uhr
Hatte schon fast nichtmehr an eine Antwort geglaubt, aber leider bringt das nichts

Hatte ich schon probiert, die Methode bricht einfach ab, keine Ausnahme, kein garnichts.
Bitte warten ..
Mitglied: DevTig
27.02.2012 um 15:29 Uhr
Eine andere Variante ist - nehme ich gerne beim scripten - die Ausgabe von Werten in MsgBox'en.

Die MsgBox entweder über eine eigene Constante und Prozedur ansteuern - ala Debug-Modus oder direkt an den gewünschten Stellen "reinklopfen".
Ersteres würde in einem Script ungefähr so aussehen:

01.
Const DoDebug = 1 ' Wert 1 für => zeige mir die MsgBox | Wert 0 für zeige sie mir nicht 
02.
 
03.
Sub ShowDebug(ByVal strMsg) 
04.
    If DoDebug = 1 Then 
05.
        MsgBox(strMsg) 
06.
    End If 
07.
End Sub
Edit:
Der aufruf wäre dann:

01.
    ShowDebug der-gewuenschte-wert & andere informationen
Bitte warten ..
Mitglied: JKoenig
27.02.2012 um 16:23 Uhr
Da ist nur das Problem, das ich nicht weis was ich da auswerfen könnte. Er bricht ja beim auslesen der Daten aus dem StreamReader ab.
Bitte warten ..
Mitglied: DevTig
27.02.2012 um 20:32 Uhr
Eine weitere Möglichkeit wäre anstatt das ganze als privat aufzurufen, es mal mit public zu probieren (Zeile 31) und eventuell mal noch die Zeile 36 und folgende - wie folgt 'einpacken'

01.
List<string> lst = new List<string>(); 
02.
using (StreamReader streamReader = new StreamReader(pipeServer)) 
03.
04.
    while (true)  
05.
    {  
06.
        string data = streamReader.ReadLine();  
07.
        lst.Add(data);  
08.
        receivedData[pipe].Add(data);  
09.
        if (data == null)  
10.
            break;  
11.
12.
}
Laut MSDN die richtige Art und Weise einen StreamReader zu nutzen.
Bitte warten ..
Ähnliche Inhalte
IDE & Editoren
IDE für C-Sharp und C++ auf Windows
gelöst Frage von BugdroidIDE & Editoren8 Kommentare

Hallo, Ich nutze derzeit Visual Studio, aber auf Dauer ist es mir etwas zu Ressourcenfressend und für meine Zwecke ...

C und C++
C Sharp XAML Universal
Frage von DippsC und C++3 Kommentare

Hallo ich versuche gerade mit C#2015 ein Projekt Universal XAML zu erstellen um auf einem Raberry PI 2 mit ...

C und C++
C-sharp SearchPattern (Regex)
Frage von YanmaiC und C++6 Kommentare

Hallo ihr Administratoren, ich verwende ein AUtocpmpletemenu Plugin. Dort habe ich Snippets, die dann sozusagen completed werden. Beim erstellen ...

C und C++
C-sharp Form buggt
gelöst Frage von YanmaiC und C++2 Kommentare

Hallo ihr Administratoren. Ich habe ein kleines Problem. Unszwar möchte ich eine Ordner von C# zu einem PHP Script ...

Neue Wissensbeiträge
Windows 10

Windows 10 Fall Creators Update - Neue Funktion Hyper-V Standardswitch kann ggf. Fehler bei Proxy Configs verursachen

Erfahrungsbericht von rzlbrnft vor 10 StundenWindows 102 Kommentare

Hallo Kollegen, Da wir die Gefahr lieben, haben wir bei einigen Usern nun mittlerweile das Creators Update drauf. Einige ...

Sicherheit

TLS-Zertifikat und privater Schlüssel von Microsofts Dynamics 365 geleakt

Information von Penny.Cilin vor 12 StundenSicherheit

Microsoft hat versehentlich das TLS-Zertifikat inklusive dem privaten Schlüssel seiner Business-Anwendung Dynamics 365 geleakt. TLS-Zertifikat und privater Schlüssel von ...

Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 1 TagViren und Trojaner3 Kommentare

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 1 TagRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

Netzwerkmanagement
NAS über zwei weitere Ethernet Anschlüsse verbinden
gelöst Frage von Sibelius001Netzwerkmanagement16 Kommentare

Sorry - ich bin hier wahrscheinlich als kompetter IT Trottel unterwegs. Aber eventuell kann mir jemand ganz einfach helfen: ...

LAN, WAN, Wireless
Häufig Probleme beim Anmelden in WLAN
Frage von mabue88LAN, WAN, Wireless15 Kommentare

Hallo zusammen, in einem Netzwerk gibt es relativ häufig (1-2 mal pro Woche) Probleme mit der WLAN-Verbindung. Zunächst mal ...

Netzwerkgrundlagen
Hi eine blöde frage. xD
Frage von 132954Netzwerkgrundlagen13 Kommentare

Also: Habe 2012 r2 essentials neuinstalliert, allerdings installiert diese version ja gleich diesen gangen AD kram mit, den hab ...