Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O exemplo básico de descoberta mostra como tornar um serviço detectável e como pesquisar e chamar um serviço detectável. Este exemplo é composto por dois projetos: serviço e cliente.
Observação
Este exemplo implementa a descoberta no código. Para obter um exemplo que implementa a descoberta na configuração, consulte Configuração.
Serviço
Esta é uma implementação de serviço de calculadora simples. O código relacionado à descoberta pode ser encontrado no local em que Main um ServiceDiscoveryBehavior é adicionado ao host de serviço e um UdpDiscoveryEndpoint é adicionado, conforme mostrado no código a seguir.
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();
// ...
}
Cliente
O cliente usa um DynamicEndpoint para localizar o serviço. O DynamicEndpoint, um ponto de extremidade padrão, resolve o ponto de extremidade do serviço quando o cliente é aberto. Nesse caso, o DynamicEndpoint procura o serviço com base no contrato de serviço. O DynamicEndpoint conduz a pesquisa por um UdpDiscoveryEndpoint, como padrão. Depois de localizar um ponto de extremidade de serviço, o cliente se conectará a esse serviço pela associação especificada.
public static void Main()
{
DynamicEndpoint dynamicEndpoint = new DynamicEndpoint( ContractDescription.GetContract(typeof(ICalculatorService)), new WSHttpBinding());
// ...
}
O cliente define um método chamado InvokeCalculatorService que usa a DiscoveryClient classe para pesquisar serviços.
DynamicEndpoint herda de ServiceEndpoint, portanto, pode ser passado para o método InvokeCalculatorService. Em seguida, o exemplo usa a DynamicEndpoint para criar uma instância CalculatorServiceClient e chama as várias operações do serviço de calculadora.
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();
}
Para usar este exemplo
Este exemplo utiliza endpoints HTTP e, para executar este exemplo, as ACLs de URL corretas devem ser adicionadas. Para obter mais informações, consulte Configurando HTTP e HTTPS. Executar o comando a seguir em um privilégio elevado deverá adicionar as ACLs apropriadas. Talvez você queira substituir o Domínio e o Nome de Usuário pelos argumentos a seguir se o comando não funcionar como está.
netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%Usando o Visual Studio, abra o Basic.sln e compile o exemplo.
Execute o aplicativo service.exe.
Depois que o serviço for iniciado, execute o client.exe.
Observe que o cliente foi capaz de encontrar o serviço sem saber seu endereço.