Interoperabilità con WCF: invocare servizi da PHP e Flash

4 pagine in totale: <<Indietro 1 2 [3] 4 Avanti >>

Affinchè il behavior funzioni in modo corretto, è necessario prestare particolare attenzione ai namespace XML specificati nel WSDL per le diverse parti in esso definite. In particolare il namespace XML definito per il contratto del servizio, quello indicato tramite l'attributo ServiceBehavior e il namespace di binding definito nel tag endpoint del file di configurazione devono coincidere.

L'esempio proposto di seguito si riferisce ad un semplice servizio che espone il metodo "classico" HelloWorld. In tal caso il namespace XML è: http://www.winfxitalia.com/Services/MyService/V1/.

 
namespace WinFXItalia.Services 
{ 
    [ServiceBehavior(Namespace = "http://www.winfxitalia.com/Services/MyService/V1/")] 
    public class MyService : IMyService 
    { 
        public string HelloWorld() 
        { 
            return "Hello World"; 
        } 
    } 
 
    [ServiceContract(Namespace = "http://www.winfxitalia.com/Services/MyService/V1/")] 
    public interface IMyService 
    { 
        [OperationContract(Name = "HelloWorld")] 
        string HelloWorld(); 
    } 
} 
 
<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
  <system.serviceModel> 
    <services> 
      <service behaviorConfiguration="MyServiceBehavior" name="WinFXItalia.Services.MyService"> 
        <endpoint bindingNamespace="http://www.winfxitalia.com/Services/MyService/V1/" address="http://ServerName/MyService.svc" binding="basicHttpBinding" contract="WinFXItalia.Services.IMyService" /> 
      </service> 
    </services> 
    <behaviors> 
      <serviceBehaviors> 
        <behavior name="MyServiceBehavior"> 
          <serviceMetadata httpGetEnabled="True" httpGetUrl="http://ServerName/MyService.svc" /> 
          <serviceDebug includeExceptionDetailInFaults="False" /> 
        </behavior> 
      </serviceBehaviors> 
    </behaviors> 
  </system.serviceModel> 
</configuration> 

Attivazione dell'EndpointBehavior

L'attivazione del behavior descritto nel paragrafo precedente non può essere fatta in modo dichiarativo come avviene nel caso dei behavior built-in. Infatti la classe usata normalmente in WCF per l'attivazione di un endpoint e dei suoi behavior è System.ServiceModel.ServiceHost (che deriva da System.ServiceModel.ServiceHostBase). Essa legge dalla configurazione tramite il metodo protetto ApplyConfiguration le informazioni necessarie per caricare i vari behavior specificati dallo sviluppatore. Questa classe viene creata da un oggetto factory (System.ServiceModel.Activation.ServiceHostFactory) che ha lo scopo semplicemente di attivare l'istanza.

Per poter iniettare il nuovo comportamento che modifica i meccanismi di generazione dei metadati nel WSDL occorre creare due nuove classi derivate rispettivamente da ServiceHost e ServiceHostFactory. La prima delle due classi permette di aggiungere alla lista dei behavior dell'endpoint la funzionalità richiesta, la seconda classe non fa altro che attivare un'istanza del service host personalizzato.

 
using System; 
using System.ServiceModel; 
using System.ServiceModel.Description; 
 
namespace WinFXItalia.Services 
{ 
    public class InlineWsdlServiceHost : ServiceHost 
    { 
        public InlineWsdlServiceHost() 
        { 
        } 
 
        public InlineWsdlServiceHost(Type serviceType, params Uri[] baseAddresses) : base(serviceType, baseAddresses) 
        { 
        } 
 
        public InlineWsdlServiceHost(object singeltonInstance, params Uri[] baseAddresses) : base(singeltonInstance, baseAddresses) 
        { 
        } 
 
        protected override void ApplyConfiguration() 
        { 
            base.ApplyConfiguration(); 
            this.InjectInlineWsdlExtension(); 
        } 
 
        private void InjectInlineWsdlExtension() 
        { 
            foreach (ServiceEndpoint endpoint in this.Description.Endpoints) 
            { 
                endpoint.Behaviors.Add(new InlineWsdlEndpointBehavior()); 
            } 
        } 
    } 
} 

4 pagine in totale: <<Indietro 1 2 [3] 4 Avanti >>

Contenuti dell'articolo

Commenti

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Segnala su:  Facebook  Messenger  Twitter        |

TUTORIALS

Silverlight

.NET Framework

Accesso ai dati

Architettura e design software

Windows Azure

TOP TEN ARTICOLI
ARTICOLI VIA E-EMAIL

Iscriviti alla nostra newsletter nuoviarticoli per ricevere via e-mail le notifiche!

Iscrivi subito! »»»

MEDIA
IN EVIDENZA
MISC