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.
Not
Bu örnek kodda bulma uygular. Yapılandırmada bulma uygulayan bir örnek için bkz . Yapılandırma.
Hizmet
Bu basit bir hesap makinesi hizmeti uygulamasıdır. Bulmayla ilgili kod, hizmet konağına bir eklendiği ve aşağıdaki kodda gösterildiği gibi eklendiği UdpDiscoveryEndpoint yerde ServiceDiscoveryBehavior bulunabilirMain
.
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();
// ...
}
İstemci
İstemci, hizmeti bulmak için bir DynamicEndpoint kullanır. standart DynamicEndpointuç nokta olan , istemci açıldığında 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ı DiscoveryClient kullanan adlı InvokeCalculatorService
bir yöntem tanımlar. DynamicEndpoint öğesinden ServiceEndpointdevralır, böylece yöntemine InvokeCalculatorService
geçirilebilir. Örnek, örneğini oluşturmak CalculatorServiceClient
için öğesini kullanır DynamicEndpoint ve hesap makinesi hizmetinin çeşitli işlemlerini çağırı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
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ı ve Kullanıcı Adınızı aşağıdaki bağımsız değişkenlerle değiştirmek isteyebilirsiniz.
netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%
Visual Studio'yu kullanarak Basic.sln açın ve örneği oluşturun.
service.exe uygulamasını çalıştırın.
Hizmet başlatıldıktan sonra client.exe çalıştırın.
İstemcinin adresini bilmeden hizmeti bulabildiğini gözlemleyin.