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 >>
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.
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









