Ich suche nach einem minimalen Beispiel für WCF Named Pipes (ich erwarte zwei minimale Anwendungen, Server und Client, die über eine Named Pipe kommunizieren können.)
Microsoft hat den brillanten Artikel Erste Schritte Tutorial , der WCF über HTTP beschreibt, und ich suche nach etwas Ähnlichem über WCF und Named Pipes.
Ich habe mehrere Beiträge im Internet gefunden, aber sie sind etwas "fortgeschritten". Ich benötige nur minimale, nur obligatorische Funktionen, damit ich meinen Code hinzufügen und die Anwendung zum Laufen bringen kann.
Wie ersetze ich das, um eine Named Pipe zu verwenden?
<endpoint address="http://localhost:8000/ServiceModelSamples/Service/CalculatorService"
binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_ICalculator"
contract="ICalculator" name="WSHttpBinding_ICalculator">
<identity>
<userPrincipalName value="OlegPc\Oleg" />
</identity>
</endpoint>
Wie ersetze ich das, um eine Named Pipe zu verwenden?
// Step 1 of the address configuration procedure: Create a URI to serve as the base address.
Uri baseAddress = new Uri("http://localhost:8000/ServiceModelSamples/Service");
// Step 2 of the hosting procedure: Create ServiceHost
ServiceHost selfHost = new ServiceHost(typeof(CalculatorService), baseAddress);
try
{
// Step 3 of the hosting procedure: Add a service endpoint.
selfHost.AddServiceEndpoint(
typeof(ICalculator),
new WSHttpBinding(),
"CalculatorService");
// Step 4 of the hosting procedure: Enable metadata exchange.
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
selfHost.Description.Behaviors.Add(smb);
// Step 5 of the hosting procedure: Start (and then stop) the service.
selfHost.Open();
Console.WriteLine("The service is ready.");
Console.WriteLine("Press <ENTER> to terminate service.");
Console.WriteLine();
Console.ReadLine();
// Close the ServiceHostBase to shutdown the service.
selfHost.Close();
}
catch (CommunicationException ce)
{
Console.WriteLine("An exception occurred: {0}", ce.Message);
selfHost.Abort();
}
Wie generiere ich einen Client für die Verwendung einer Named Pipe?
c#
wcf
named-pipes
javapowered
quelle
quelle
Antworten:
Ich habe gerade dieses ausgezeichnete kleine Tutorial gefunden .defekter Link (zwischengespeicherte Version )Ich habe auch das Tutorial von Microsoft befolgt, was nett ist, aber ich brauchte auch nur Pipes.
Wie Sie sehen können, benötigen Sie keine Konfigurationsdateien und all das unordentliche Zeug.
Übrigens verwendet er sowohl HTTP als auch Pipes. Entfernen Sie einfach alle Codezeilen, die sich auf HTTP beziehen, und Sie erhalten ein reines Pipe-Beispiel.
quelle
Versuche dies.
Hier ist der Serviceteil.
Hier ist der Proxy
Und hier ist der Service-Hosting-Teil.
quelle
/helloservice
am Ende der Endpunktadresse im Proxy hinzufügen .Schauen Sie sich mein stark vereinfachtes Echo-Beispiel an : Es wurde für die Verwendung der grundlegenden HTTP-Kommunikation entwickelt, kann jedoch leicht geändert werden, um Named Pipes zu verwenden, indem die Dateien app.config für Client und Server bearbeitet werden. Nehmen Sie folgende Änderungen vor:
Bearbeiten Sie die Datei app.config des Servers , entfernen oder kommentieren Sie den Eintrag http baseAddress und fügen Sie einen neuen baseAddress- Eintrag für die Named Pipe hinzu ( net.pipe genannt ). Auch wenn Sie nicht beabsichtigen , HTTP zur Verwendung für ein Kommunikationsprotokoll, stellen Sie sicher , dass die serviceMetadata und serviceDebug entweder kommentiert oder gestrichen:
Bearbeiten Sie die Datei app.config des Clients so, dass die basicHttpBinding entweder auskommentiert oder gelöscht wird und ein netNamedPipeBinding- Eintrag hinzugefügt wird. Sie müssen auch den Endpunkteintrag ändern , um die Pipe zu verwenden:
Das obige Beispiel wird nur mit Named Pipes ausgeführt, aber nichts hindert Sie daran, mehrere Protokolle zum Ausführen Ihres Dienstes zu verwenden. AFAIK, Sie sollten in der Lage sein, einen Server einen Dienst ausführen zu lassen, der sowohl Named Pipes als auch HTTP (sowie andere Protokolle) verwendet.
Außerdem wird die Bindung in der app.config- Datei des Clients stark vereinfacht. Es gibt viele verschiedene Parameter, die Sie anpassen können, abgesehen von der Angabe der baseAddress ...
quelle
Ich habe dieses einfache Beispiel aus verschiedenen Suchergebnissen im Internet erstellt.
Mit der obigen URI kann ich dem Webdienst eine Referenz in meinem Client hinzufügen.
quelle
Ich fand diese Seite wirklich hilfreich und das Beispielprojekt läuft ohne Änderungen: https://dotnet-experience.blogspot.com/2012/02/inter-process-duplex-communication-with.html
Vergessen Sie nicht, die Named Pipe-Unterstützung in den Windows-Funktionen zu aktivieren. Dieser Artikel enthält einige gute Screenshots zu diesem Zweck in der oberen Antwort: WCF Named Pipe im Windows-Dienst mit App.Config
Das Projekt, auf das in der akzeptierten Lösung verwiesen wird, läuft auf meinem PC nicht wie es ist. Ich habe einige Korrekturen in der app.config versucht, erhalte aber immer noch die folgende Ausnahme:
quelle