Aracılığıyla paylaş


Temel Örnek

Temel bulma örneği, bir hizmetin nasıl bulunabilir hale getirileceklerini ve bulunabilir bir hizmeti nasıl arayıp çağıracaklarını gösterir. Bu örnek iki projeden oluşur: hizmet ve istemci.

Uyarı

Bu örnek kodda keşifi hayata geçirir. Yapılandırmada keşif uygulayan bir örnek için bkz Yapılandırma.

Hizmet

Bu basit bir hesap makinesi hizmeti uygulamasıdır. İlgili keşif kodu, hizmet konağına bir Main eklendiği ve aşağıdaki kodda gösterildiği gibi bir ServiceDiscoveryBehavior eklendiği UdpDiscoveryEndpoint içerisinde bulunabilir.

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

Müşteri

İstemci, hizmeti bulmak için bir DynamicEndpoint kullanır. İstemci açıldığında, standart bir uç nokta olan DynamicEndpoint, hizmetin uç noktasını çözümler. Bu durumda, DynamicEndpoint hizmet sözleşmesine göre hizmeti arar. , DynamicEndpoint aramayı varsayılan olarak bir UdpDiscoveryEndpoint üzerinden yürütür. Bir hizmet uç noktasını bulduklarında, istemci belirtilen bağlama üzerinden bu hizmete bağlanır.

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

İstemci, hizmetleri aramak için sınıfını InvokeCalculatorService kullanan adlı DiscoveryClient bir yöntem tanımlar. DynamicEndpoint ServiceEndpoint devralır, böylece InvokeCalculatorService yöntemine geçirilebilir. Örnek, hesap makinesi hizmetinin çeşitli işlemlerini çağırmak için DynamicEndpoint örneğini oluşturur ve CalculatorServiceClient nesnesini kullanır.

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

Bu örneği kullanmak için

  1. Bu örnek HTTP uç noktalarını kullanır ve bu örneği çalıştırmak için uygun URL ACL'lerinin eklenmesi gerekir. Daha fazla bilgi için bkz . HTTP ve HTTPS'yi yapılandırma. Yükseltilmiş bir ayrıcalıkta aşağıdaki komutun yürütülmesi uygun ACL'leri eklemelidir. Komut olduğu gibi çalışmazsa, Etki Alanınızı ve Kullanıcı Adınızı aşağıdaki bağımsız değişkenler ile değiştirmek isteyebilirsiniz. netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%

  2. Visual Studio'yu kullanarak Basic.sln açın ve örneği oluşturun.

  3. service.exe uygulamasını çalıştırın.

  4. Hizmet başlatıldıktan sonra client.exeçalıştırın.

  5. İstemcinin adresini bilmeden hizmeti bulabildiğini gözlemleyin.