c # - Kommunikation mellem to forskellige applikationer

Indlæg af Hanne Mølgaard Plasc

Problem



Vi har to applikationer, der kører på en enkelt maskine, hvoraf den ene er en webapplikation, der svarer til hver anmodning ved at læse xml-dokument (er). Vi ønsker at tilføje tilfældet, at når den nye xml-fil er oprettet eller den eksisterende fil er udskiftet, må programmet ikke læs fil, indtil det hele er ændret, og når det er tilfældet, skal det svare med den gamle fil.


Da webapplikationer virker efter anmodning/reaktionscyklus, besluttede vi at denne cyklus ikke skulle blandes ved at vide, at tiden mellem filændring og anmodningstid er skjult i live-running-system, skal vi opdele fillæsningsprocessen. Til det formål bruger vi FileSystemWatcher i lokal maskine med Windows eller konsol ansøgning (eller nogle andre siger bruger WCF i stedet).


Nu når vi kommer til spørgsmål i det ovenstående tilfælde, siger vi hvordan kan vi kommunikere disse to (eller flere) applikationer?

Bedste reference


Ligner dig 'Jeg er interesseret i Navngivne rør til at aktivere IPC, tjek dette link til et eksempel, eller dette MSDN-link. [2] [3]


Gribning af koden fra NamedPipeServerStream-siden af ​​MSDN illustrerer simpelthen (se siden NamedPipeClientStream for klientsiden): [4] [5]


using (NamedPipeServerStream pipeServer =
    new NamedPipeServerStream("testpipe", PipeDirection.Out))
{
    Console.WriteLine("NamedPipeServerStream object created.");

    // Wait for a client to connect
    Console.Write("Waiting for client connection...");
    pipeServer.WaitForConnection();

    Console.WriteLine("Client connected.");
    try
    {
        // Read user input and send that to the client process.
        using (StreamWriter sw = new StreamWriter(pipeServer))
        {
            sw.AutoFlush = true;
            Console.Write("Enter text: ");
            sw.WriteLine(Console.ReadLine());
        }
    }
    // Catch the IOException that is raised if the pipe is broken
    // or disconnected.
    catch (IOException e)
    {
        Console.WriteLine("ERROR: {0}", e.Message);
    }
}