Procedura: esporre un contratto a client SOAP e Web

Per impostazione predefinita, Windows Communication Foundation (WCF) rende disponibili endpoint solo ai client SOAP. In Procedura: creare un servizio Web di base viene reso disponibile un endpoint a client non SOAP. Possono verificarsi casi in cui si desidera rendere lo stesso contratto disponibile in entrambi i modi, come endpoint Web e come endpoint SOAP. In questo argomento viene illustrato un esempio di come ottenere tale risultato.

Per definire il contratto di servizio

  1. Definire un contratto di servizio utilizzando un'interfaccia contrassegnata con gli attributi ServiceContractAttribute, WebInvokeAttribute e WebGetAttribute.

    Nota

    Per impostazione predefinita, WebInvokeAttribute esegue il mapping delle chiamate POST all'operazione. Tuttavia, è possibile definire il metodo di mapping all'operazione specificando un parametro "method=". WebGetAttribute non dispone di un parametro "method=" ed esegue solo il mapping delle chiamate GET all'operazione del servizio.

  2. Implementare il contratto di servizio.

Per ospitare il servizio

  1. Creare un oggetto ServiceHost.

  2. Aggiungere una classe ServiceEndpoint con BasicHttpBinding per l'endpoint SOAP.

  3. Aggiungere una classe ServiceEndpoint con WebHttpBinding per l'endpoint non SOAP e aggiungere WebHttpBehavior all'endpoint.

  4. Chiamare Open() su un'istanza di ServiceHost per aprire l'host del servizio.

Per chiamare operazioni del servizio mappate a GET in Internet Explorer

  1. Aprire Internet Explorer e digitare "https://localhost:8000/EchoWithGet?s=Hello, world!" e premere INVIO. L'URL contiene l'indirizzo di base del servizio ("https://localhost:8000/"), l'indirizzo relativo dell'endpoint ("") l'operazione del servizio da chiamare ("EchoWithGet") e un punto interrogativo seguito da un elenco di parametri denominati separati mediante una e commerciale (&).

Per chiamare operazioni del servizio sull'endpoint Web nel codice

  1. Creare un'istanza di WebChannelFactory all'interno di un blocco using.

Nota

Close() viene automaticamente chiamato sul canale alla fine del blocco using.

  1. Creare il canale e chiamare il servizio.

Per chiamare operazioni del servizio sull'endpoint SOAP

  1. Creare un'istanza di ChannelFactory all'interno di un blocco using.

  2. Creare il canale e chiamare il servizio.

Per chiudere l'host del servizio

  1. Chiudere l'host del servizio.

Esempio

Di seguito è riportato il codice completo per questo argomento.

Compilazione del codice

Durante la compilazione di Service.cs fare riferimento a System.ServiceModel.dll e System.ServiceModel.Web.dll.

Vedere anche

Riferimenti

WebHttpBinding
WebGetAttribute
WebInvokeAttribute
WebServiceHost
ChannelFactory
WebHttpBehavior