Esporta (0) Stampa
Espandi tutto

Procedura: Creare un servizio basato su REST per l'accesso a Service Bus

Aggiornamento: settembre 2014

Service Bus di Microsoft Azure attualmente supporta applicazioni considerate come servizi basati su REST, ad esempio un'applicazione di Service Bus tradizionale conforme al modello di programmazione Web. Per questo tipo di applicazione viene usato il modello di programmazione di Windows Communication Foundation (WCF) di base. Viene infatti definito e creato un contratto del servizio, vengono usati un binding e credenziali di sicurezza per la connessione a Service Bus e così via. L'aggiunta principale è costituita dal fatto che un'applicazione di Service Bus basata su REST usa un contratto del servizio in cui sono specificati i membri a cui vengono applicati gli attributi [OperationContract, WebGet] o [OperationContract, WebInvoke]. Questi comportamenti definiscono l'interfaccia come un'interfaccia REST e consentono a Service Bus di interagire con altre applicazioni di tipo REST. Nelle applicazioni è pertanto incluso codice aggiuntivo che consente loro di creare messaggi di tipo HTTP. Tutte queste applicazioni infine usano il binding WebHttpRelayBinding. Per altre informazioni, vedere Procedura: Esporre un servizio Web basato su REST tramite Service Bus. Per un esempio esteso di un'applicazione di servizio basata su REST, vedere l'Esercitazione su REST per Service Bus, che si basa a sua volta sull'esempio WebHttp di Service Bus.

Il processo di hosting di un'applicazione di Service Bus basata su REST è molto simile all'hosting di un'applicazione di Service Bus standard. Le differenze principali riguardano il contratto e la configurazione, mentre l'effettivo processo di hosting è sostanzialmente lo stesso.

  1. Creare il servizio usando il modello standard, come definito in Creazione di un servizio per Service Bus. In altri termini, definire e implementare un contratto del servizio, configurare e implementare l'host servizio e così via.

    1. Quando si applica l'attributo OperationContractAttribute al contratto del servizio, assicurarsi di applicare gli attributi appropriati per identificare i membri basati su REST. Per altre informazioni, vedereProcedura: Procedura: Esporre un servizio Web basato su REST tramite Service Bus.

      Il seguente codice di esempio mostra come contrassegnare un membro dell'interfaccia come membro GET di tipo REST.

      public interface IImageContract
      {
          [OperationContract, WebGet]
          Stream GetImage();
      }
      
    2. Quando si implementa il contratto, impostare l'intestazione del tipo di contenuto appropriata per le risposte Web in uscita, in base alle esigenze dell'applicazione.

      public ImageService() 
      {
          this.bitmap = Image.FromFile(imageFileName);
      }
      
      public Stream GetImage()
      {
          MemoryStream stream = new MemoryStream();
          this.bitmap.Save(stream, ImageFormat.Jpeg);
      
          stream.Position = 0;
          WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg";
      
          return stream;
      }        
      
      
      
  2. Creare l'indirizzo per il servizio usando il metodo CreateServiceUri:

    string serviceNamespace = “myServiceNamespace”
    Uri address = ServiceBusEnvironment.CreateServiceUri("https", serviceNamespace, "Image");
    
    
  3. Creare una nuova istanza di WebServiceHost.

    WebServiceHost host = new WebServiceHost(typeof(ImageService), address);
    

    La classe WebServiceHost deriva dalla classe ServiceHost e integra il modello di programmazione Web WCF. Facilita inoltre l'hosting dei servizi basati su REST. È consigliabile usare WebServiceHost anziché ServiceHost nell'implementazione dell'applicazione di Service Bus basata su REST. Per altre informazioni, vedere il modello di programmazione REST WCF nella documentazione relativa a WCF.

  4. Specificare l'indirizzo, il binding e i contratti (a cui si fa riferimento anche come elementi "ABC", con l'acronimo delle parole inglesi "Address, Binding, Contracts") usati dall'endpoint del servizio.

        <services>
          <!-- Application Service -->
          <service name="Microsoft.ServiceBus.Samples.ImageService"
                   behaviorConfiguration="default">
            <endpoint name="RelayEndpoint"
                      contract="Microsoft.ServiceBus.Samples.IImageContract"
                      binding="webHttpRelayBinding"
                      bindingConfiguration="default"
                      behaviorConfiguration="sharedAccessSignatureClientCredentials"
                      address="" />
        </service>
    

    In questo caso gli elementi ABC sono collegati all'endpoint nel file App.config. Per altre informazioni sulla configurazione di un'applicazione, vedere Configurazione di un servizio WCF per la registrazione con Service Bus.

    L'unico binding da usare per un endpoint del servizio in un'applicazione di Service Bus basata su REST è WebHttpRelayBinding.

  5. Se necessario, disabilitare l'autenticazione client.

    
        <bindings>
          <!-- Application Binding -->
          <webHttpRelayBinding>
            <binding name="default">
                 <security relayClientAuthenticationType="None" />
            </binding>
          </webHttpRelayBinding>
        </bindings>
    
    

    Per impostazione predefinita, il binding WebHttpRelayBinding richiede l'autenticazione client. Questo passaggio descrive come disabilitarla nell'elemento <binding> nel file App.config, in modo che il client non debba presentare credenziali, ad esempio durante l'uso di un browser. Per altre informazioni sull'autenticazione con Service Bus, vedere Sicurezza e autenticazione di una connessione a Service Bus.

  6. Definire la sicurezza per l'applicazione:

        <behaviors>
          <endpointBehaviors>
            <behavior name="sharedAccessSignatureClientCredentials">
              <transportClientEndpointBehavior>
                <tokenProvider>
                  <sharedAccessSignature keyName=”RootManageSharedAccessKey” key="**key**" />
                </tokenProvider>
              </transportClientEndpointBehavior>
            </behavior>
          </endpointBehaviors>
        </behaviors>
    
    

    In questo esempio la sicurezza è definita nel file App.config. Per altre informazioni sulla sicurezza, vedere Sicurezza e autenticazione di una connessione a Service Bus.

  7. Aprire il servizio con una chiamata a WebServiceHost.Open:

    host.Open()
    
  8. Al termine, chiudere l'host con WebServiceHost.Close.

    host.Close();
    

Microsoft sta conducendo un sondaggio in linea per comprendere l'opinione degli utenti in merito al sito Web di MSDN. Se si sceglie di partecipare, quando si lascia il sito Web di MSDN verrà visualizzato il sondaggio in linea.

Si desidera partecipare?
Mostra:
© 2015 Microsoft