Routing in base al corpo
Nell’esempio RouteByBody viene illustrato come implementare un servizio che accetta oggetti di messaggi con qualsiasi azione SOAP. Questo esempio si basa sull'Introduzione che implementa un servizio calcolatrice. Il servizio implementa una sola operazione Calculate
che accetta un parametro di richiesta Message e restituisce una risposta Message.
In questo esempio il client è un'applicazione console (con estensione exe) e il servizio è ospitato in IIS.
Nota
La procedura di installazione e le istruzioni di compilazione per questo esempio si trovano alla fine di questo argomento.
Nell'esempio viene illustrata la distribuzione dei messaggi in base al contenuto del corpo. Il meccanismo di distribuzione messaggi del modello di servizi incorporato di Windows Communication Foundation (WCF) è basato sulle azioni del messaggio. Tuttavia, molti servizi Web esistenti definiscono tutte le relative operazioni con Action="". È impossibile compilare un servizio basato su WSDL che continua a distribuire messaggi di richiesta in base alle informazioni dell'azione. In questo esempio viene mostrato un contratto di servizio basato su WSDL (WSDL è contenuto nel file Service.wsdl incluso con l'esempio). Il contratto di servizio è Calcolatrice, simile a quello usato in Introduzione. Tuttavia [OperationContract]
specifica Action=""
per tutte le operazioni.
[ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples"),
XmlSerializerFormat, DispatchByBodyBehavior]
public interface ICalculator
{
[OperationContract(Action="")]
double Add(double n1, double n2);
[OperationContract(Action = "")]
double Subtract(double n1, double n2);
[OperationContract(Action = "")]
double Multiply(double n1, double n2);
[OperationContract(Action = "")]
double Divide(double n1, double n2);
}
Se dispone di un contratto, un servizio richiede un comportamento di distribuzione DispatchByBodyBehavior
personalizzato per consentire la distribuzione dei messaggi tra le operazioni. Tale comportamento di distribuzione inizializza il selettore di operazione personalizzato DispatchByBodyElementOperationSelector
con una tabella dei nomi delle operazioni con chiavi basate sul QName dei rispettivi elementi wrapper. DispatchByBodyElementOperationSelector
analizza il tag iniziale del primo elemento figlio del corpo e seleziona l'operazione utilizzando la tabella menzionata.
Il client usa un proxy generato automaticamente dal WSDL esportato dal servizio usando lo strumento ServiceModel Metadata Utility Tool (Svcutil.exe).
svcutil.exe /n:http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples /uxs http://localhost/servicemodelsamples/service.svc?wsdl /out:generatedProxy.cs
Se le azioni di tutte le operazioni sono vuote non si verifica alcun impatto sul codice client, eccetto che per i parametri Action nel proxy generato automaticamente.
Il codice client esegue molti calcoli. Quando si esegue l'esempio, le richieste e le risposte dell'operazione vengono visualizzate nella finestra della console client. Premere INVIO nella finestra del client per arrestare il client.
Add(100, 15.99) = 115.99
Subtract(145, 76.54) = 68.46
Multiply(9, 81.25) = 731.25
Divide(22, 7) = 3.14285714285714
Press <ENTER> to terminate client.
Per impostare, compilare ed eseguire l'esempio
Assicurarsi di aver eseguito la Procedura di installazione singola per gli esempi di Windows Communication Foundation.
Per compilare la soluzione, seguire le istruzioni in Compilazione degli esempi di Windows Communication Foundation.
Per eseguire l'esempio in un solo computer o tra computer diversi, seguire le istruzioni in Esecuzione degli esempi di Windows Communication Foundation.