기본 샘플
기본 검색 샘플에서는 서비스를 검색 가능하게 만드는 방법과 검색 가능한 서비스를 검색하고 호출하는 방법을 보여 줍니다. 이 샘플은 서비스와 클라이언트에 해당하는 두 개의 프로젝트로 구성되어 있습니다.
참고 항목
이 샘플은 코드에서 검색을 구현합니다. 구성에서 검색을 구현하는 샘플은 구성을 참조하세요.
서비스
간단한 계산기 서비스 구현입니다. 검색 관련 코드는 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를 실행합니다.
클라이언트에서 주소를 모르고도 서비스를 찾을 수 있는지 확인합니다.