Condividi tramite


Procedura: creare un servizio Web di base

Windows Communication Foundation (WCF) consente di creare un servizio che espone un endpoint Web. Gli endpoint Web inviano dati in XML semplice, senza SOAP envelope. In questo argomento viene dimostrato come esporre un endpoint di questo tipo.

Nota

L'unico modo per proteggere un endpoint Web è esporlo tramite HTTPS utilizzando la protezione del trasporto. Quando si utilizza la protezione basata sul messaggio, le informazioni sulla protezione vengono inserite generalmente nelle intestazioni SOAP, perché i messaggi inviati a endpoint non SOAP non contengono SOAP envelope, non c'è altra posizione in cui collocare le informazioni sulla protezione ed è necessario affidarsi alla protezione del trasporto.

Per creare un endpoint Web

  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 con l'operazione. Tuttavia, è possibile definire il metodo di mapping dell'operazione specificando un parametro "method=". WebGetAttribute non dispone di un parametro "method=" ed esegue solo il mapping delle chiamate GET con l'operazione del servizio.

  2. Implementare il contratto di servizio

Per ospitare il servizio

  1. Creare un oggetto WebServiceHost.

  2. Aggiungere un ServiceEndpoint con WebHttpBehavior.

    Nota

    Se non viene aggiunto un endpoint, WebServiceHost ne crea automaticamente uno predefinito. WebServiceHost aggiunge anche WebHttpBehavior e disattiva la pagina della Guida HTTP e la funzionalità WSDL (Web Services Description Language) GET in modo che l'endpoint dei metadati non interferisca con l'endpoint HTTP predefinito.

    L'aggiunta di un endpoint non SOAP con un URL "" provoca un comportamento imprevisto quando si tenta di chiamare un'operazione sull'endpoint. La ragione è che l'URI di ascolto dell'endpoint è lo stesso URI della pagina della Guida (la pagina visualizzata quando si esplora all'indirizzo di base di un servizio WCF).

    Per evitare che ciò accada è possibile svolgere una delle azioni seguenti:

    • Specificare sempre un URI non vuoto per un endpoint non SOAP.
    • Disattivare la pagina della Guida. Per questa operazione utilizzare il codice seguente:
  3. Aprire l'host del servizio e attendere finché l'utente non preme INVIO.

    In questo esempio viene dimostrato come ospitare un servizio Web con un'applicazione console. È anche possibile ospitare tale servizio all'interno di IIS. A questo scopo, specificare la classe WebServiceHostFactory in un file con estensione svc come è dimostrato nel codice seguente.

    <%ServiceHost 
        language=c#
        Debug="true"
        Service="Microsoft.Samples.Service"
        Factory=System.ServiceModel.Activation.WebServiceHostFactory%>
    

    In questo esempio viene configurato in modo imperativo l'host del servizio Web nel codice. Se lo si desidera, è anche possibile configurare l'host del servizio Web in un file di configurazione dell'applicazione. Il file di configurazione dell'applicazione seguente può essere utilizzato per eseguire la stessa configurazione del codice elencato in precedenza.

    <configuration>
      <system.serviceModel>
        <services>
          <service
              name="Microsoft.ServiceModel.Samples.BasicWebProgramming.Service"
              behaviorConfiguration="MyServiceBehavior">
            <host>
              <baseAddresses>
                <add baseAddress="https://localhost:8000/"/>
              </baseAddresses>
            </host>
            <endpoint address="" 
                      binding="webHttpBinding"
                      contract="Microsoft.ServiceModel.Samples.BasicWebProgramming.IService" />
    
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="MyServiceBehavior">
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    </configuration>
    

    Per utilizzare il file di configurazione dell'applicazione, è necessario apportare alcune modifiche al codice precedente. Non è più necessario specificare l'indirizzo di base, i comportamenti di servizio o gli endpoint nel codice. Nell'esempio seguente viene illustrato questo codice modificato.

     using (WebServiceHost host = new WebServiceHost(typeof(Service)))
          {
              host.Open();
              Console.WriteLine("Service is running");
              Console.WriteLine("Press enter to quit...");
              Console.ReadLine();
              host.Close();
    }
    

Per chiamare operazioni del servizio mappate su 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 nel codice

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

  2. Aggiungere WebHttpBehavior all'endpoint che verrà chiamato da ChannelFactory.

  3. Creare il canale e chiamare il servizio.

  4. Chiudere la classe WebServiceHost.

Esempio

Di seguito è riportato il codice completo per questo esempio.

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