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
Kontrollera att du har utfört engångsinstallationsproceduren för Windows Communication Foundation-exempel.
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.
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");