Megosztás:


Alapszintű minta

Az alapszintű felderítési minta bemutatja, hogyan lehet felderíthetővé tenni egy szolgáltatást, és hogyan kereshet és hívhat meg felderíthető szolgáltatást. Ez a minta két projektből áll: a szolgáltatásból és az ügyfélből.

Megjegyzés:

Ez a minta kódban implementálja a felderítést. A konfigurációban a felderítést megvalósító mintát a Konfiguráció című témakörben talál.

Szolgáltatás

Ez egy egyszerű számológép szolgáltatás implementálása. A felderítési kód megtalálható Main -ban, ahol egy ServiceDiscoveryBehavior hozzá van adva a szolgáltatás gazdagépéhez, és hozzáadnak egy UdpDiscoveryEndpoint-t a következő kódban látható módon.

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();
    // ...
}

Ügyfél

Az ügyfél egy DynamicEndpoint eszközt használ a szolgáltatás megkereséséhez. A DynamicEndpointstandard végpont feloldja a szolgáltatás végpontját az ügyfél megnyitásakor. Ebben az esetben a DynamicEndpoint a szolgáltatási szerződés alapján keresi meg a szolgáltatást. A DynamicEndpoint alapértelmezés szerint egy UdpDiscoveryEndpoint-en végzi a keresést. Miután megtalálta a szolgáltatásvégpontot, az ügyfél a megadott kötésen keresztül csatlakozik a szolgáltatáshoz.

public static void Main()
{
   DynamicEndpoint dynamicEndpoint = new DynamicEndpoint( ContractDescription.GetContract(typeof(ICalculatorService)), new WSHttpBinding());
   // ...
}

Az ügyfél meghatároz egy metódust InvokeCalculatorService , amely az osztályt használja a DiscoveryClient szolgáltatások kereséséhez. A DynamicEndpoint a ServiceEndpoint-ből örököl, így átadható a InvokeCalculatorService metódusnak. A példa ezután a DynamicEndpoint használja egy CalculatorServiceClient példány létrehozására, és meghívja a kalkulátor szolgáltatás különféle műveleteit.

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();
}

A minta használata

  1. Ez a minta HTTP-végpontokat használ, és a minta futtatásához hozzá kell adni a megfelelő URL-hozzáférés-vezérlési listákat. További információ: HTTP és HTTPS konfigurálása. Ha a következő parancsot emelt szintű jogosultsággal hajtja végre, hozzá kell adnia a megfelelő ACL-eket. Ha a parancs nem működik, érdemes lehet a Domain és a felhasználónév helyett a következő argumentumokat használni. netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%

  2. A Visual Studio használatával nyissa meg a Basic.sln, és hozza létre a mintát.

  3. Futtassa a service.exe alkalmazást.

  4. A szolgáltatás elindítása után futtassa a client.exe.

  5. Figyelje meg, hogy az ügyfél a cím ismerete nélkül tudta megtalálni a szolgáltatást.