Esporta (0) Stampa
Espandi tutto

Passaggio 4: Ospitare ed eseguire un servizio Web di base per la registrazione con Service Bus

Aggiornamento: giugno 2014

Questa è la quarta di sette attività necessarie per creare un'applicazione di servizio di Service Bus di base e un'applicazione client in grado di chiamare il servizio. Per una panoramica delle sei attività, vedere l'argomento Esercitazione sulla messaggistica inoltrata di Service Bus. In questo argomento viene illustrato come eseguire un servizio di Service Bus di base.

Per un elenco completo del codice scritto per questa attività, vedere l'esempio dopo la procedura.

Tempo previsto per il completamento: 10 minuti

  1. Aggiungere nel progetto un riferimento a Microsoft.ServiceBus.dll:

    1. In Esplora soluzioni fare clic con il pulsante destro del mouse su Riferimenti nella cartella del progetto, quindi scegliere Aggiungi riferimento.

    2. Nella finestra di dialogo Aggiungi riferimento fare clic sulla scheda .NET e scorrere verso il basso fino a Microsoft.ServiceBus. In alternativa, fare clic su Sfoglia e individuare l'assembly nell'unità disco rigido. Tale assembly in genere si trova in Programmi\<DirectoryInstallazioneSdk>\v1.0\Assemblies\NET4.0. Selezionare l'assembly Microsoft.ServiceBus, quindi fare clic su OK.

    noteNota
    Quando si usa un compilatore da riga di comando, ad esempio Csc.exe, è necessario specificare anche il percorso degli assembly.

  2. In Program.cs aggiungere un'istruzione using per lo spazio dei nomi Microsoft.ServiceBus.

    using Microsoft.ServiceBus;
    

    Microsoft.ServiceBus è lo spazio dei nomi contenente le API che consente di accedere, a livello di codice, a molte delle funzionalità di base di Service Bus. È probabile che questo spazio dei nomi venga usato in tutte le applicazioni di Service Bus.

  3. Nel metodo Main() creare tre variabili in cui archiviare lo spazio dei nomi servizio, il nome dell'autorità emittente e la relativa chiave privata (ovvero una credenziale costituita da nome e password) letti dalla finestra della console.

    Console.Write("Your Service Namespace: ");
    string serviceNamespace = Console.ReadLine();
    Console.Write("Your Issuer Name: ");
    string issuerName = Console.ReadLine();
    Console.Write("Your Issuer Secret: ");
    string issuerSecret = Console.ReadLine();
    

    Il nome e la chiave privata dell'autorità emittente verranno usati successivamente per accedere al progetto di Service Bus. Lo spazio dei nomi servizio viene passato come parametro a CreateServiceUri per la creazione di un URI del servizio.

  4. Mediante un oggetto TransportClientEndpointBehavior, dichiarare che come tipo di credenziale verrà usata una chiave privata condivisa. Aggiungere il seguente codice direttamente sotto il codice aggiunto nel passaggio precedente.

    TransportClientEndpointBehavior sharedSecretServiceBusCredential = new TransportClientEndpointBehavior();
    sharedSecretServiceBusCredential.TokenProvider = TokenProvider.CreateSharedSecretTokenProvider(issuerName, issuerSecret);
    

  1. Dopo il codice aggiunto nel passaggio precedente, creare un'istanza Uri per l'indirizzo di base del servizio. Tale URI specifica lo schema di Service Bus, lo spazio dei nomi servizio e il percorso dell'interfaccia del servizio.

    Uri address = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, "EchoService");
    

    “sb” è l'abbreviazione dello schema di Service Bus e indica che come protocollo è in uso TCP. Il protocollo è stato indicato anche in precedenza nel file di configurazione, quando come binding è stato specificato NetTcpRelayBinding.

    Per questa esercitazione, l'URI è sb://putServiceNamespaceHere.windows.net/EchoService.

  1. Impostare la modalità di connettività su AutoDetect.

    ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.AutoDetect;
    

    La modalità di connettività descrive il protocollo usato dal servizio per comunicare con Service Bus, ovvero HTTP oppure TCP. Quando si usa l'impostazione predefinita AutoDetect, il servizio tenta di connettersi a Service Bus su TCP se disponibile e su HTTP se TCP non è disponibile. Si noti che questo protocollo è diverso da quello specificato dal servizio per la comunicazione client. Tale protocollo dipende dal binding usato. Ad esempio, un servizio può usare il binding BasicHttpRelayBinding e questo indica che il relativo endpoint (esposto in Service Bus) comunica con i client su HTTP. Lo stesso servizio può specificare ConnectivityMode.AutoDetect per indicare che il servizio comunica con Service Bus su TCP.

  2. Creare l'host servizio usando l'URI creato precedentemente in questa sezione.

    ServiceHost host = new ServiceHost(typeof(EchoService), address);
    

    L'host servizio è l'oggetto WCF che crea un'istanza del servizio. In questo caso il tipo di servizio che si desidera creare (EchoService) viene passato a esso, nonché all'indirizzo in cui si desidera esporre il servizio.

  3. All'inizio del file Program.cs aggiungere riferimenti a System.ServiceModel.Description e Microsoft.ServiceBus.Description.

    using System.ServiceModel.Description;
    using Microsoft.ServiceBus.Description;
    
  4. Tornando a Main(), configurare l'endpoint per abilitare l'accesso pubblico.

    IEndpointBehavior serviceRegistrySettings = new ServiceRegistrySettings(DiscoveryType.Public);
    

    Questo passaggio segnala a Service Bus che l'applicazione può essere trovata pubblicamente esaminando il feed ATOM di Service Bus per il progetto. Se si imposta DiscoveryType su private, un client sarà comunque in grado di accedere al servizio. Quest'ultimo tuttavia non sarà visibile durante la ricerca nello spazio dei nomi di Service Bus. Il client deve invece conoscere in anticipo il percorso dell'endpoint. Per altre informazioni, vedere Individuazione ed esposizione di un servizio di Service Bus.

  5. Applicare le credenziali del servizio agli endpoint del servizio definiti nel file App.config:

    foreach (ServiceEndpoint endpoint in host.Description.Endpoints)
    {
        endpoint.Behaviors.Add(serviceRegistrySettings);
        endpoint.Behaviors.Add(sharedSecretServiceBusCredential);
    }
    

    Come spiegato nel passaggio precedente, nel file di configurazione potrebbero essere stati dichiarati più servizi e più endpoint. In tal caso, questo codice scorrerebbe il file di configurazione per ricercare tutti gli endpoint a cui applicare le credenziali. Per questa esercitazione, nel file di configurazione è tuttavia contenuto un solo endpoint.

  1. Aprire il servizio.

    host.Open();
    
  2. Informare l'utente che il servizio è in esecuzione e spiegargli come arrestarlo.

    Console.WriteLine("Service address: " + address);
    Console.WriteLine("Press [Enter] to exit");
    Console.ReadLine();
    
  3. Al termine, chiudere l'host servizio.

    host.Close();
    
  4. Premere F6 per creare il progetto.

Esempio

Nell'esempio riportato di seguito sono inclusi il contratto e l'implementazione del servizio derivanti dai passaggi precedenti dell'esercitazione e il servizio viene ospitato in un'applicazione console. Compilare il seguente codice in un eseguibile denominato EchoService.exe.

using System;
using System.ServiceModel;
using System.ServiceModel.Description;
using Microsoft.ServiceBus;
using Microsoft.ServiceBus.Description;

namespace Microsoft.ServiceBus.Samples
{
    [ServiceContract(Name = "IEchoContract", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/")]

    public interface IEchoContract
    {
        [OperationContract]
        String Echo(string text);
    }

    public interface IEchoChannel : IEchoContract, IClientChannel { };

    [ServiceBehavior(Name = "EchoService", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/")]

    class EchoService : IEchoContract
    {
        public string Echo(string text)
        {
            Console.WriteLine("Echoing: {0}", text);
            return text;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {

            ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.AutoDetect;

            
            
            Console.Write("Your Service Namespace: ");
            string serviceNamespace = Console.ReadLine();
            Console.Write("Your Issuer Name: ");
            string issuerName = Console.ReadLine();
            Console.Write("Your Issuer Secret: ");
            string issuerSecret = Console.ReadLine();

           // Create the credentials object for the endpoint.
            TransportClientEndpointBehavior sharedSecretServiceBusCredential = new TransportClientEndpointBehavior();
            sharedSecretServiceBusCredential.TokenProvider = TokenProvider.CreateSharedSecretTokenProvider(issuerName, issuerSecret);


            // Create the service URI based on the service namespace.
            Uri address = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, "EchoService");

            // Create the service host reading the configuration.
            ServiceHost host = new ServiceHost(typeof(EchoService), address);

            // Create the ServiceRegistrySettings behavior for the endpoint.
            IEndpointBehavior serviceRegistrySettings = new ServiceRegistrySettings(DiscoveryType.Public);

            // Add the Service Bus credentials to all endpoints specified in configuration.
            foreach (ServiceEndpoint endpoint in host.Description.Endpoints)
            {
                endpoint.Behaviors.Add(serviceRegistrySettings);
                endpoint.Behaviors.Add(sharedSecretServiceBusCredential);
            }
            
            // Open the service.
            host.Open();

            Console.WriteLine("Service address: " + address);
            Console.WriteLine("Press [Enter] to exit");
            Console.ReadLine();

            // Close the service.
            host.Close();
        }
    }
}

Ora che è stata creata l'interfaccia, procedere con il Passaggio 5: Creare un client WCF per il contratto di servizio per implementarla.

Mostra:
© 2014 Microsoft