Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Przykład podstawowego odnajdywania przedstawia sposób odnajdywania usługi oraz sposób wyszukiwania i wywoływania odnajdywalnej usługi. Ten przykład składa się z dwóch projektów: usługi i klienta.
Uwaga / Notatka
Ten przykład implementuje odnajdywanie w kodzie. Aby uzyskać przykład, który implementuje odnajdywanie w konfiguracji, zobacz Konfiguracja.
Usługa
Jest to prosta implementacja usługi kalkulatora. Kod związany z odkrywaniem można znaleźć w Main
, gdzie dodawany jest element ServiceDiscoveryBehavior do hosta usługi, a element UdpDiscoveryEndpoint jest dodawany tak jak pokazano w poniższym kodzie.
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 używa a DynamicEndpoint do lokalizowania usługi. DynamicEndpoint, który jest standardowym punktem końcowym, ustala punkt końcowy usługi po otwarciu klienta. W tym przypadku DynamicEndpoint szuka usługi na podstawie kontraktu usługi. Domyślnie DynamicEndpoint przeprowadza wyszukiwanie w UdpDiscoveryEndpoint. Po zlokalizowaniu punktu końcowego usługi klient łączy się z usługą za pośrednictwem określonego powiązania.
public static void Main()
{
DynamicEndpoint dynamicEndpoint = new DynamicEndpoint( ContractDescription.GetContract(typeof(ICalculatorService)), new WSHttpBinding());
// ...
}
Klient definiuje metodę o nazwie InvokeCalculatorService
, która używa DiscoveryClient klasy do wyszukiwania usług. Element DynamicEndpoint dziedziczy z klasy ServiceEndpoint, aby można było go przekazać do metody InvokeCalculatorService
. W tym przykładzie użyto elementu DynamicEndpoint, aby utworzyć wystąpienie obiektu CalculatorServiceClient
i wywołać różne operacje kalkulatora.
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();
}
Aby skorzystać z tego przykładu
W tym przykładzie użyto punktów końcowych HTTP, a do uruchomienia przykładu należy dodać odpowiednie ACL adresów URL. Aby uzyskać więcej informacji, zobacz Konfigurowanie protokołu HTTP i HTTPS. Wykonanie następującego polecenia z podwyższonym poziomem uprawnień powinno spowodować dodanie odpowiednich ACL. Jeśli polecenie nie działa, możesz zastąpić domenę i nazwę użytkownika następującymi argumentami.
netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%
Za pomocą programu Visual Studio otwórz Basic.sln i skompiluj przykład.
Uruchom aplikację service.exe.
Po uruchomieniu usługi uruchom client.exe.
Zwróć uwagę, że klient mógł znaleźć usługę bez znajomości jej adresu.