기본 검색 샘플은 서비스를 검색 가능하게 만드는 방법과 검색 가능한 서비스를 검색하고 호출하는 방법을 보여줍니다. 이 샘플은 서비스 및 클라이언트의 두 프로젝트로 구성됩니다.
비고
이 샘플은 코드에서 검색을 구현합니다. 구성에서 검색을 구현하는 샘플은 구성을 참조 하세요.
서비스
간단한 계산기 서비스 구현입니다. 서비스 호스트에 Main
이 추가되고 아래 코드와 같이 ServiceDiscoveryBehavior가 추가된 위치에 있는 UdpDiscoveryEndpoint에서 검색 관련 코드를 찾을 수 있습니다.
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();
// ...
}
클라이언트
클라이언트는 DynamicEndpoint를 사용하여 서비스를 찾습니다. 클라이언트가 열리면 표준 엔드포인트인 DynamicEndpoint가 서비스의 엔드포인트를 확인합니다. 이 경우 DynamicEndpoint 서비스 계약에 따라 서비스를 찾습니다. DynamicEndpoint는 기본적으로 UdpDiscoveryEndpoint에서 검색을 수행합니다. 서비스 엔드포인트를 찾으면 클라이언트는 지정된 바인딩을 통해 해당 서비스에 연결합니다.
public static void Main()
{
DynamicEndpoint dynamicEndpoint = new DynamicEndpoint( ContractDescription.GetContract(typeof(ICalculatorService)), new WSHttpBinding());
// ...
}
클라이언트는 InvokeCalculatorService
클래스를 사용하여 서비스를 검색하는 DiscoveryClient 메서드를 정의합니다.
DynamicEndpoint는 ServiceEndpoint에서 상속되므로 InvokeCalculatorService
메서드에 전달될 수 있습니다. 그런 다음, 이 예제를 사용하여 DynamicEndpoint 인스턴스 CalculatorServiceClient
를 만들고 계산기 서비스의 다양한 작업을 호출합니다.
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();
}
이 샘플을 사용하려면
이 샘플에서는 HTTP 엔드포인트를 사용하고 이 샘플을 실행하려면 적절한 URL ACL을 추가해야 합니다. 자세한 내용은 HTTP 및 HTTPS 구성을 참조하세요. 관리자 권한으로 다음 명령을 실행하면 적절한 ACL이 추가됩니다. 명령이 있는 그대로 작동하지 않는 경우 도메인 및 사용자 이름을 다음 인수로 대체할 수 있습니다.
netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%
Visual Studio를 사용하여 Basic.sln 열고 샘플을 빌드합니다.
service.exe 애플리케이션을 실행합니다.
서비스가 시작된 후 client.exe실행합니다.
클라이언트가 주소를 모르고 서비스를 찾을 수 있는지 확인합니다.