Basisvoorbeeld
Het basisdetectievoorbeeld laat zien hoe u een service detecteerbaar maakt en hoe u een detecteerbare service kunt zoeken en aanroepen. Dit voorbeeld bestaat uit twee projecten: service en client.
Notitie
In dit voorbeeld wordt detectie in code geïmplementeerd. Zie Configuratie voor een voorbeeld waarmee detectie in de configuratie wordt geïmplementeerd.
Service
Dit is een eenvoudige rekenmachineservice-implementatie. De detectiegerelateerde code vindt u in Main
de locatie waar een ServiceDiscoveryBehavior wordt toegevoegd aan de servicehost en een UdpDiscoveryEndpoint wordt toegevoegd, zoals wordt weergegeven in de volgende code.
using (ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress))
{
serviceHost.AddServiceEndpoint(typeof(ICalculatorService), new
WSHttpBinding(), String.Empty);
// Make the service discoverable over UDP multicast
serviceHost.Description.Behaviors.Add(new ServiceDiscoveryBehavior());
serviceHost.AddServiceEndpoint(new UdpDiscoveryEndpoint());
serviceHost.Open();
// ...
}
Klant
De client gebruikt een DynamicEndpoint om de service te vinden. Het DynamicEndpoint, een standaardeindpunt, lost het eindpunt van de service op wanneer de client wordt geopend. In dit geval zoekt de DynamicEndpoint service op basis van het servicecontract. De DynamicEndpoint zoekopdracht wordt standaard uitgevoerd op een UdpDiscoveryEndpoint . Zodra een service-eindpunt is gevonden, maakt de client verbinding met die service via de opgegeven binding.
public static void Main()
{
DynamicEndpoint dynamicEndpoint = new DynamicEndpoint( ContractDescription.GetContract(typeof(ICalculatorService)), new WSHttpBinding());
// ...
}
De client definieert een methode InvokeCalculatorService
die de DiscoveryClient klasse gebruikt om te zoeken naar services. De DynamicEndpoint overnames van ServiceEndpoint, zodat deze kunnen worden doorgegeven aan de InvokeCalculatorService
methode. In het voorbeeld wordt vervolgens gebruikgemaakt van het DynamicEndpoint maken van een exemplaar van en het aanroepen van CalculatorServiceClient
de verschillende bewerkingen van de rekenmachineservice.
static void InvokeCalculatorService(ServiceEndpoint serviceEndpoint)
{
// Create a client
CalculatorServiceClient client = new CalculatorServiceClient(serviceEndpoint);
Console.WriteLine("Invoking CalculatorService");
Console.WriteLine();
double value1 = 100.00D;
double value2 = 15.99D;
// Call the Add service operation.
double result = client.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);
// Call the Subtract service operation.
result = client.Subtract(value1, value2);
Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result);
// Call the Multiply service operation.
result = client.Multiply(value1, value2);
Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result);
// Call the Divide service operation.
result = client.Divide(value1, value2);
Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result);
Console.WriteLine();
//Closing the client gracefully closes the connection and cleans up resources
client.Close();
}
Dit voorbeeld gebruiken
Dit voorbeeld maakt gebruik van HTTP-eindpunten en om dit voorbeeld uit te voeren, moeten de juiste URL-ACL's worden toegevoegd. Zie HTTP en HTTPS configureren voor meer informatie. Als u de volgende opdracht uitvoert met een verhoogde bevoegdheid, moet u de juiste ACL's toevoegen. U kunt uw domein en gebruikersnaam vervangen door de volgende argumenten als de opdracht niet werkt zoals is.
netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%
Open met Visual Studio de Basic.sln en bouw het voorbeeld.
Voer de service.exe-toepassing uit.
Nadat de service is gestart, voert u de client.exe uit.
Merk op dat de client de service kon vinden zonder het adres ervan te kennen.