Dela via


Kanalfabrik

ChannelFactory-exemplet visar hur ett klientprogram kan skapa en kanal med ChannelFactory klassen i stället för en genererad klient. Det här exemplet baseras på komma igång som implementerar en kalkylatortjänst.

Kommentar

Installationsproceduren och bygginstruktionerna för det här exemplet finns i slutet av det här avsnittet.

Det här exemplet använder ChannelFactory<TChannel> klassen för att skapa en kanal till en tjänstslutpunkt. För att skapa en kanal till en tjänstslutpunkt genererar du vanligtvis en klienttyp med Verktyget för ServiceModel-metadata (Svcutil.exe) och skapar en instans av den genererade typen. Du kan också skapa en kanal med hjälp ChannelFactory<TChannel> av klassen, vilket visas i det här exemplet. Tjänsten som skapas med följande exempelkod är identisk med tjänsten i Komma igång.

EndpointAddress address = new EndpointAddress("http://localhost/servicemodelsamples/service.svc");
WSHttpBinding binding = new WSHttpBinding();
ChannelFactory<ICalculator> factory = new
                    ChannelFactory<ICalculator>(binding, address);
ICalculator channel = factory.CreateChannel();

Viktigt!

Om du kör det här exemplet i ett scenario mellan datorer måste du ersätta "localhost" i föregående kod med det fullständigt kvalificerade namnet på den dator som kör tjänsten. Det här exemplet använder inte konfigurationen för att ange slutpunktsadressen, så detta måste göras i kod.

När kanalen har skapats kan tjänståtgärder anropas precis som med en genererad klient.

// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = channel.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);

Om du vill stänga kanalen måste den först omvandlas till ett IClientChannel gränssnitt. Det beror på att kanalen som genereras deklareras i klientprogrammet med hjälp av ICalculator gränssnittet, som har metoder som Add och Subtract men inte Close. Metoden Close kommer från ICommunicationObject gränssnittet.

// Close the channel.
 ((IClientChannel)client).Close();

När du kör exemplet visas åtgärdsbegäranden och svar i klientkonsolfönstret. Tryck på RETUR i klientfönstret för att stänga av klientprogrammet.

Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714

Press <ENTER> to terminate client.

Så här konfigurerar du, skapar och kör exemplet

  1. Kontrollera att du har utfört engångsinstallationsproceduren för Windows Communication Foundation-exempel.

  2. Om du vill skapa C# eller Visual Basic .NET-versionen av lösningen följer du anvisningarna i Skapa Windows Communication Foundation-exempel. Observera att det här exemplet inte aktiverar metadatapublicering. Du måste först aktivera metadatapublicering för det här exemplet för att återskapa klienttypen.

  3. Om du vill köra exemplet i en konfiguration med en eller flera datorer följer du anvisningarna i Köra Windows Communication Foundation-exempel.

Så här kör du exemplet mellan datorer

Ersätt "localhost" i följande kod med det fullständigt kvalificerade namnet på den dator som kör tjänsten.

EndpointAddress address = new EndpointAddress("http://localhost/servicemodelsamples/service.svc");