Interoperabilità con WCF: invocare servizi da PHP e Flash

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

Creazione dell'EndpointBehavior

WCF permette di modificare il proprio comportamento predefinito tramite i behavior. L'attivazione dei behavior in genere viene fatta in modo dichiarativo tramite l'uso di attributi oppure tramite configurazione. Infatti WCF include una serie di behavior built-in per i servizi e gli endpoint, che possono essere attivati specificando gli opportuni settaggi nel file di configurazione. In ogni caso lo sviluppatore può creare i propri behavior personalizzati implementando opportunamente alcune interfacce tra cui System.ServiceModel.Description.IServiceBehavior e System.ServiceModel.Description.IEndpointBehavior.

Nel caso preso in esame dall'articolo, quello che occorre realizzare è un EndpointBehavior che implementi in modo mirato l'interfaccia System.ServiceModel.Description.IWsdlExportExtension. Questa interfaccia permette di definire i comportamenti necessari per la creazione del WSDL. La nuova implementazione del metodo ExportEndpoint deve far sì che nel WDSL vengano rimossi tutti i tag <xsd:import> e che le diverse sottoparti del WSDL vengano composte insieme al fine di creare un documento XML unico.

 
using System.Collections; 
using System.Collections.Generic; 
using System.ServiceModel.Channels; 
using System.ServiceModel.Description; 
using System.ServiceModel.Dispatcher; 
using System.Xml.Schema; 
using WsdlDescription = System.Web.Services.Description.ServiceDescription; 
 
namespace WinFXItalia.Services 
{ 
    public class InlineWsdlEndpointBehavior : IWsdlExportExtension, IEndpointBehavior 
    { 
        private void AddImportedSchemas(XmlSchema schema, XmlSchemaSet schemaSet, List<XmlSchema> importList) 
        { 
            foreach (XmlSchemaImport import in schema.Includes) 
            { 
                ICollection realSchemas = schemaSet.Schemas(import.Namespace); 
 
                foreach (XmlSchema item in realSchemas) 
                { 
                    if (!importList.Contains(item)) 
                    { 
                        importList.Add(item); 
                        this.AddImportedSchemas(item, schemaSet, importList); 
                    } 
                } 
            } 
        } 
 
        private void RemoveXsdImports(XmlSchema schema) 
        { 
            for (int i = 0; i < schema.Includes.Count; i++) 
            { 
                if (schema.Includes[i] is XmlSchemaImport) 
                    schema.Includes.RemoveAt(i--); 
            } 
        } 
 
        public void ExportContract(WsdlExporter exporter, WsdlContractConversionContext context) 
        { 
        } 
 
        public void ExportEndpoint(WsdlExporter exporter, WsdlEndpointConversionContext context) 
        { 
            XmlSchemaSet schemaSet = exporter.GeneratedXmlSchemas; 
 
            foreach (WsdlDescription wsdl in exporter.GeneratedWsdlDocuments) 
            { 
                List<XmlSchema> importList = new List<XmlSchema>(); 
 
                foreach (XmlSchema schema in wsdl.Types.Schemas) 
                    this.AddImportedSchemas(schema, schemaSet, importList); 
 
                wsdl.Types.Schemas.Clear(); 
 
                foreach (XmlSchema schema in importList) 
                { 
                    this.RemoveXsdImports(schema); 
                    wsdl.Types.Schemas.Add(schema); 
                } 
            } 
        } 
 
        public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters) 
        { 
        } 
 
        public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime) 
        { 
        } 
 
        public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher dispatcher) 
        { 
        } 
 
        public void Validate(ServiceEndpoint endpoint) 
        { 
        } 
    } 
} 

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