Channel Factory
Het ChannelFactory-voorbeeld laat zien hoe een clienttoepassing een kanaal kan maken met de ChannelFactory klasse in plaats van een gegenereerde client. Dit voorbeeld is gebaseerd op de Aan de slag die een rekenmachineservice implementeert.
Notitie
De installatieprocedure en build-instructies voor dit voorbeeld bevinden zich aan het einde van dit onderwerp.
In dit voorbeeld wordt de ChannelFactory<TChannel> klasse gebruikt om een kanaal te maken voor een service-eindpunt. Als u doorgaans een kanaal naar een service-eindpunt wilt maken, genereert u een clienttype met het hulpprogramma voor metagegevens van ServiceModel (Svcutil.exe) en maakt u een exemplaar van het gegenereerde type. U kunt ook een kanaal maken met behulp van de ChannelFactory<TChannel> klasse, zoals in dit voorbeeld wordt gedemonstreerd. De service die door de volgende voorbeeldcode is gemaakt, is identiek aan de service in aan de slag.
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();
Belangrijk
Als u dit voorbeeld uitvoert in een scenario voor meerdere machines, moet u 'localhost' in de voorgaande code vervangen door de volledig gekwalificeerde naam van de computer waarop de service wordt uitgevoerd. In dit voorbeeld wordt geen configuratie gebruikt om het eindpuntadres in te stellen. Dit moet dus gebeuren in code.
Zodra het kanaal is gemaakt, kunnen servicebewerkingen net als bij een gegenereerde client worden aangeroepen.
// 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);
Als u het kanaal wilt sluiten, moet het eerst naar een IClientChannel interface worden gecast. Dit komt doordat het kanaal zoals gegenereerd wordt gedeclareerd in de clienttoepassing met behulp van de ICalculator
interface, die methoden heeft zoals Add
en Subtract
niet Close
. De Close
methode is afkomstig van de ICommunicationObject interface.
// Close the channel.
((IClientChannel)client).Close();
Wanneer u het voorbeeld uitvoert, worden de bewerkingsaanvragen en -antwoorden weergegeven in het clientconsolevenster. Druk op Enter in het clientvenster om de clienttoepassing af te sluiten.
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.
Het voorbeeld instellen, compileren en uitvoeren
Zorg ervoor dat u de eenmalige installatieprocedure voor de Windows Communication Foundation-voorbeelden hebt uitgevoerd.
Als u de C# of Visual Basic .NET-editie van de oplossing wilt bouwen, volgt u de instructies in het bouwen van de Windows Communication Foundation-voorbeelden. Houd er rekening mee dat in dit voorbeeld het publiceren van metagegevens niet is ingeschakeld. U moet het publiceren van metagegevens voor dit voorbeeld eerst inschakelen om het clienttype opnieuw te genereren.
Als u het voorbeeld wilt uitvoeren in een configuratie met één of meerdere computers, volgt u de instructies in Het uitvoeren van de Windows Communication Foundation-voorbeelden.
De voorbeeld-cross-machine uitvoeren
Vervang 'localhost' in de volgende code door de volledig gekwalificeerde naam van de computer waarop de service wordt uitgevoerd.
EndpointAddress address = new EndpointAddress("http://localhost/servicemodelsamples/service.svc");