Grundläggande exempel
Exempel på grundläggande identifiering visar hur du gör en tjänst identifierbar och hur du söker efter och anropar en identifieringsbar tjänst. Det här exemplet består av två projekt: tjänst och klient.
Kommentar
Det här exemplet implementerar identifiering i kod. Ett exempel som implementerar identifiering i konfigurationen finns i Konfiguration.
Tjänst
Det här är en enkel implementering av kalkylatorns tjänst. Den identifieringsrelaterade koden finns där en ServiceDiscoveryBehavior läggs till i Main
tjänstvärden och en UdpDiscoveryEndpoint läggs till enligt följande kod.
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();
// ...
}
Klient
Klienten använder en DynamicEndpoint för att hitta tjänsten. , DynamicEndpointen standardslutpunkt, löser slutpunkten för tjänsten när klienten öppnas. I det här fallet DynamicEndpoint letar efter tjänsten baserat på tjänstkontraktet. Utför DynamicEndpoint sökningen över en UdpDiscoveryEndpoint som standard. När en tjänstslutpunkt hittas ansluter klienten till tjänsten via den angivna bindningen.
public static void Main()
{
DynamicEndpoint dynamicEndpoint = new DynamicEndpoint( ContractDescription.GetContract(typeof(ICalculatorService)), new WSHttpBinding());
// ...
}
Klienten definierar en metod som heter InvokeCalculatorService
som använder DiscoveryClient klassen för att söka efter tjänster. Ärver DynamicEndpoint från ServiceEndpoint, så att den kan skickas till InvokeCalculatorService
metoden. Exemplet använder DynamicEndpoint sedan för att skapa en instans av CalculatorServiceClient
och anropar de olika åtgärderna i kalkylatortjänsten.
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();
}
Så här använder du det här exemplet
Det här exemplet använder HTTP-slutpunkter och för att köra det här exemplet måste rätt URL-ACL:er läggas till. Mer information finns i Konfigurera HTTP och HTTPS. Om du kör följande kommando med en förhöjd behörighet bör du lägga till lämpliga ACL:er. Du kanske vill ersätta domänen och användarnamnet med följande argument om kommandot inte fungerar som det är.
netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%
Med Visual Studio öppnar du Basic.sln och skapar exemplet.
Kör programmet service.exe.
När tjänsten har startat kör du client.exe.
Observera att klienten kunde hitta tjänsten utan att känna till dess adress.