Interoperabilità con WCF: invocare servizi da PHP e Flash
di Riccardo Golia, in Windows Communication Foundation, 12 gennaio 2010
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.
Approfondimeti
-
Introduzione a Team Foundation Server 2010
-
Multithreading e parallelismo con il .NET Framework 4.0
-
Le novità nel .NET Framework 4.0 di WPF, WCF e WF
-
Le novità di Visual Basic 2010 e C# 4
-
Mostrare le camere di sorveglianza tramite il .NET Micro Framework
-
La piattaforma Microsoft per il cloud computing: Windows Azure
-
Le novità di Windows 7 per gli sviluppatori
-
Le problematiche più comuni di un'architettura M-V-VM con WPF
-
Costruire una chat per Silverlight con il PollingDuplexHttpBinding

Commenti
mi piace
non mi piace
Facebook
Twitter









