Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Ukázka základního zjišťování ukazuje, jak vytvořit zjistitelnou službu a jak vyhledat a volat zjistitelnou službu. Tato ukázka se skládá ze dvou projektů: služby a klienta.
Poznámka:
Tato ukázka implementuje zjišťování v kódu. Ukázku, která implementuje zjišťování v konfiguraci, najdete v tématu Konfigurace.
Služba
Jedná se o jednoduchou implementaci služby kalkulačky. Kód související se zjišťováním najdete v Main, kde se ServiceDiscoveryBehavior přidá do hostitele služby a UdpDiscoveryEndpoint se přidá, jak je znázorněno v následujícím kódu.
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
Klient používá DynamicEndpoint k vyhledání služby. Standardní DynamicEndpoint koncový bod určí koncový bod služby, když je klient otevřen. V tomto případě DynamicEndpoint vyhledá službu na základě kontraktu služby. DynamicEndpoint provádí vyhledávání ve UdpDiscoveryEndpoint ve výchozím nastavení. Jakmile vyhledá koncový bod služby, klient se k této službě připojí přes zadanou vazbu.
public static void Main()
{
DynamicEndpoint dynamicEndpoint = new DynamicEndpoint( ContractDescription.GetContract(typeof(ICalculatorService)), new WSHttpBinding());
// ...
}
Klient definuje metodu, InvokeCalculatorService která používá DiscoveryClient třídu k vyhledávání služeb.
DynamicEndpoint je potomkem ServiceEndpoint, takže může být předán metodě InvokeCalculatorService. Příklad pak použije DynamicEndpoint k vytvoření instance CalculatorServiceClient a volání různých operací služby kalkulačky.
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();
}
Použití této ukázky
Tato ukázka používá koncové body HTTP a aby byla tato ukázka spuštěna, je nutné přidat správné URL ACLs. Další informace najdete v tématu Konfigurace PROTOKOLU HTTP a HTTPS. Spuštěním následujícího příkazu se zvýšenými oprávněními by se měly přidat příslušné seznamy ACL. Pokud příkaz nefunguje tak, jak je, může být vhodné nahradit doménu a uživatelské jméno následujícími argumenty.
netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%Pomocí sady Visual Studio otevřete Basic.sln a sestavte ukázku.
Spusťte aplikaci service.exe.
Po spuštění služby spusťte client.exe.
Všimněte si, že klient mohl službu najít, aniž by věděl její adresu.