Esempio di base
In questo esempio viene illustrato come rendere individuabile un servizio e come cercare e chiamare un servizio individuabile. Questo esempio è costituito da due progetti, ovvero il servizio e il client.
Nota: |
---|
In questo esempio l'individuazione viene implementata nel codice. Per un esempio di implementazione dell'individuazione nella configurazione, vedere Esempio di configurazione. |
Servizio
Si tratta di una semplice implementazione del servizio di calcolatrice. Il codice correlato all'individuazione è disponibile in Main
dove un oggetto ServiceDiscoveryBehavior viene aggiunto all'host del servizio e un oggetto UdpDiscoveryEndpoint viene aggiunto come illustrato nel codice seguente.
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();
// ...
}
Client
Il client utilizza un oggetto DynamicEndpoint per individuare il servizio. DynamicEndpoint è un endpoint standard che risolve l'endpoint del servizio all'apertura del client. In questo caso, DynamicEndpoint cerca il servizio basato sul contratto di servizio. Per impostazione predefinita, DynamicEndpoint esegue la ricerca su UdpDiscoveryEndpoint. Dopo aver individuato un endpoint del servizio, il client si connette al servizio sull'associazione specificata.
public static void Main()
{
DynamicEndpoint dynamicEndpoint = new DynamicEndpoint( ContractDescription.GetContract(typeof(ICalculatorService)), new WSHttpBinding());
// ...
}
Il client definisce un metodo denominato InvokeCalculatorService
che utilizza la classe DiscoveryClient per la ricerca di servizi. DynamicEndpoint eredita da ServiceEndpoint, pertanto può essere passato al metodo InvokeCalculatorService
. Nell'esempio viene quindi utilizzato DynamicEndpoint per creare un'istanza di CalculatorServiceClient
e chiamare le varie operazioni del servizio di calcolatrice.
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();
}
Per utilizzare questo esempio
Questo esempio utilizza endpoint HTTP e per eseguirlo è necessario aggiungere elenchi di controllo di accesso (ACL) agli URL appropriati. Per ulteriori informazioni, vedere Configurazione di HTTP e HTTPS. L'esecuzione del comando seguente con privilegi elevati consente di aggiungere gli elenchi di controllo di accesso appropriati. È possibile che si desideri sostituire il dominio e il nome utente per gli argomenti seguenti quando il comando non funziona nella forma originale.
netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%
Aprire Basic.sln e compilare l'esempio utilizzando Visual Studio 2010.
Eseguire l'applicazione service.exe.
Dopo aver avviato il servizio, eseguire client.exe.
Si osservi che il client è stato in grado di trovare il servizio senza conoscerne l'indirizzo.
Nota: |
---|
È possibile che gli esempi siano già installati nel computer. Verificare la directory seguente (impostazione predefinita) prima di continuare.
<UnitàInstallazione>:\WF_WCF_Samples
Se questa directory non esiste, vedere la pagina relativa agli esempi di Windows Communication Foundation (WCF) e Windows Workflow Foundation (WF) per .NET Framework 4 per scaricare tutti gli esempi di Windows Communication Foundation (WCF) e WF. Questo esempio si trova nella directory seguente.
<UnitàInstallazione>:\WF_WCF_Samples\WCF\Basic\Discovery\Basic
|