Classe EndpointAddress
Aggiornamento: novembre 2007
Fornisce un indirizzo di rete univoco che un client utilizza per comunicare con un endpoint del servizio.
Assembly: System.ServiceModel (in System.ServiceModel.dll)
Un indirizzo endpoint identifica in modo univoco l'endpoint per un servizio.
L'indirizzo appartiene all'endpoint del servizio, che contiene inoltre l'associazione, il contratto e i comportamenti per l'endpoint.
La classe EndpointAddress contiene un URI e proprietà dell'indirizzo che includono un'identità, elementi WSDL e un insieme di intestazioni facoltative. Le intestazioni facoltative vengono utilizzate per fornire informazioni aggiuntive più dettagliate sull'indirizzo per identificare o interagire con l'endpoint. Ad esempio, possono essere utilizzate per indicare quale istanza di un servizio deve essere utilizzata per elaborare un messaggio in ingresso proveniente da un particolare utente quando sono disponibili più istanze.
L'indirizzo endpoint per un servizio può essere specificato in modo imperativo mediante l'utilizzo di codice oppure in modo dichiarativo mediante la configurazione. In genere definire endpoint nel codice non è pratico in quanto le associazioni e gli indirizzi di un servizio distribuito sono solitamente diversi da quelli utilizzati durante lo sviluppo del servizio. È invece più pratico definire gli endpoint del servizio mediante la configurazione.
La classe EndpointAddress non implementa l'interfaccia ISerializable e pertanto non è serializzabile. Affinché un endpoint sia esposto come parte di un contratto di servizio è necessario che sia serializzabile e conforme con il protocollo WS-Addressing (Web Service Addressing). Gli endpoint serializzabili conformi con la versione 1.0 e la versione di agosto 2004 di WS-Addressing vengono forniti rispettivamente dalle classi EndpointAddress10 e EndpointAddressAugust2004.
using System; using System.Configuration; using System.Collections.Generic; using System.ServiceModel; using System.ServiceModel.Channels; using System.ServiceModel.Description; using System.Text; namespace Microsoft.WCF.Documentation { class HostApplication { static void Main() { HostApplication app = new HostApplication(); app.Run(); } private void Run() { // Get base address from app settings in configuration Uri baseAddress = new Uri(ConfigurationManager.AppSettings["baseAddress"]); //Create new address headers for special services and add them to an array AddressHeader addressHeader1 = AddressHeader.CreateAddressHeader( "specialservice1", "http://localhost:8000/service", 1); AddressHeader addressHeader2 = AddressHeader.CreateAddressHeader( "specialservice2", "http://localhost:8000/service", 2); // Enumerate address headers and their properties from the array. AddressHeader[] addressHeaders = new AddressHeader[2] { addressHeader1, addressHeader2 }; foreach (AddressHeader addressHeader in addressHeaders) { Console.WriteLine("AddressHeader - namespace:\t\t{0}", addressHeader.Namespace); Console.WriteLine(" - name:\t\t\t{0}", addressHeader.Name); Console.WriteLine(" - value:\t\t\t{0}", addressHeader.GetValue<int>()); Console.WriteLine(" - type:\t\t\t{0}", addressHeader.GetType()); Console.WriteLine(" - hashcode:\t\t{0}", addressHeader.GetHashCode()); Console.WriteLine(" - equals addressHeader1:\t{0}", addressHeader.Equals(addressHeader1)); // Console.WriteLine(" - Is SOAP1.1 supported:\t{0}", addressHeader.ToMessageHeader().IsMessageVersionSupported(MessageVersion.WSAddressingSoap10)); Console.WriteLine(); } Console.WriteLine(); //Add the array of address headers to an endpoint address EndpointAddress endpointAddress = new EndpointAddress( new Uri("http://localhost:8003/servicemodelsamples/service"), addressHeaders); //Create a "special" service endpoint that uses the endpointAddress. string WSHttpBindingName = "Binding1"; ServiceEndpoint specialServiceEndpoint = new ServiceEndpoint( ContractDescription.GetContract(typeof(CalculatorService)), new WSHttpBinding(WSHttpBindingName), endpointAddress ); // Create a ServiceHost for the CalculatorService type that uses the base address. ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress); //Add the specialServiceEndpoint to the serviceHost. serviceHost.Description.Endpoints.Add(specialServiceEndpoint); // Enumerate the service endpoints and some of their properties from the serviceHost. Console.WriteLine("Service endpoints:"); ServiceDescription desc = serviceHost.Description; foreach (ServiceEndpoint endpoint in desc.Endpoints) { Console.WriteLine("Endpoint - address: {0}", endpoint.Address); Console.WriteLine(" - binding name:\t\t{0}", endpoint.Binding.Name); // Console.WriteLine(" - binding name:\t\t{0}", endpoint.); Console.WriteLine(" - contract name:\t\t{0}", endpoint.Contract.Name); Console.WriteLine(" - contains addressHeader1:\t{0}", endpoint.Address.Headers.Contains(addressHeader1)); Console.WriteLine(" - count of address headers:\t{0}", endpoint.Address.Headers.Count); Console.WriteLine(); } Console.WriteLine(); // Open the ServiceHostBase to create listeners and start listening for messages. serviceHost.Open(); // The service can now be accessed. Console.WriteLine("The service is ready."); Console.WriteLine("Press <ENTER> to terminate service."); Console.WriteLine(); Console.ReadLine(); // Close the ServiceHostBase to shutdown the service. serviceHost.Close(); } } }
Windows Vista, Windows XP SP2, Windows Server 2003, Windows CE, Windows Mobile per Smartphone, Windows Mobile per Pocket PC
.NET Framework e .NET Compact Framework non supportano tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.