BlogServiceHost.Create()

WCF & Azure - Il blog di Fabio Cozzolino

Recent Posts

Tags

My

Twitter

Community

Archives

Email Notifications

Social Bar Widget

July 2007 - Posts

Ignorare gli errori negli eventi di pre-build

Me lo segno anche perchè è la seconda volta che lo cerco: http://blogs.msdn.com/astebner/archive/2006/08/08/691849.aspx

In pratica bisogna editare il file di progetto ed aggiungere il seguente codice:

<Target Name="PreBuildEvent" Condition="'$(PreBuildEvent)'!=''" DependsOnTargets="$(PreBuildEventDependsOn)"> <Exec WorkingDirectory="$(OutDir)" Command="$(PreBuildEvent)" ContinueOnError="true"> </Exec> </Target>

almeno per me è stato sufficiente Big Smile. Il post è comunque molto più dettagliato e propone tre diverse soluzioni al problema, se di problema si tratta.

IIS, Nome intestazione host e l'SSL

Nell'ottimo post di Croghen viene descritto come impostare un nome per l'host di IIS. Questa impostazione influenza, tra le altre, la generazione automatica del WSDL fatta da WCF. Purtroppo c'è un problema non immediatamente risolvibile: non funziona come dovrebbe su indirizzi che utilizzano canali SSL/TLS.

Se nel nostro WSDL indichiamo un soap:address con protocollo https, continueremo a visualizzare il nome della macchina. Per diversi motivi in fase di sviluppo (e sottolineo in fase di sviluppo) può costituire un problema, soprattutto quando al nome host che vogliamo utilizzare è legato un certificato X.509.

Don't worry, il problema è facilmente risolvibile. Muniti di IIS Metabase Explorer - come?? non l'avete mai installato?? male, molto male Stick out tongue - selezioniamo il sito web su cui dobbiamo operare e modifichiamo il valore della chiave MD_SECURE_BINDINGS con il valore:

:443:nomeintestazionehost

riavviando IIS vedremo il nome scelto anche sui protocolli https. E' anche possibile fare l'operazione descritta da Croghen modificando il valore della chiave MD_SERVER_BINDINGS.

Io ho utilizzato IIS Metabase Explorer, ma nel resource kit di IIS 6.0 potete trovare anche Metabase Explorer, la versione sviluppata da Microsoft molto più ricca di funzionalità.

Ciaoo

[WCF#15] Abilitare il MEX Endpoint programmaticamente

In applicazioni con servizi self-hosted esposti attraverso protocolli non-http, come tcp o NamedPipe, può sembrare poco immediato ed apparentemente difficoltoso abilitare i client per la generazione dei diversi proxy. In questi casi, non avendo a disposizione il WSDL (Web Service Description Language), dobbiamo abilitare il Metadata Exchange Endpoint (MEX).

Per farlo dobbiamo innanzitutto aggiungere il behavior ServiceMetadataBehavior all'elenco dei behaviors del nostro ServiceHost:

host = new ServiceHost(typeof(MyService), new Uri("net.tcp://localhost:9099/MyService")); ServiceMetadataBehavior metadata = new ServiceMetadataBehavior(); host.Description.Behaviors.Add(metadata);

e poi aggiungiamo la serie di endpoint compreso il MEX:

host.AddServiceEndpoint(typeof(IMyService), new NetTcpBinding(), ""); host.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexTcpBinding(), "MEX"); host.Open();

Da notare che l'aggiunta del ServiceMetadataBehavior deve essere fatta necessariamente prima di aggiungere il ServiceEndpoint del MEX. Questo perchè il ServiceHost, ad ogni aggiunta di ServiceEndpoint, verifica che il contratto specificato rientri tra quelli implementati dal servizio che sta ospitando. Se la verifica fallisce, il ServiceHost controlla che nella collection dei behaviors sia presente un ServiceMetadataBehavior. Quindi riesegue la verifica controllando che il contratto specificato rientri tra quelli consentiti dal behavior.

Questo meccanismo ci permette di non "sporcare" i nostri servizi con un contratto (IMetadataExchange) che non andremo mai ad implementare.

bye.

Ps.:

Posted: Jul 23 2007, 06:39 PM by Fabio.Cozzolino | with no comments
Filed under:
[WCF#14] Estendere l'XmlObjectSerializer

Talvolta può essere necessario estendere l'XmlObjectSerializer perchè, magari, il serializer di default (DataContractSerializer) non soddisfa pienamente le nostre esigenze. E' complicato spiegarvi il perchè, ma ho avuto l'esigenza di ricostruire il messaggio di risposta e il DataContractSerializer non si comportava come doveva. Non potendo intervenire sulle entity ho esteso l'XmlObjectSerializer per costruirmene uno adeguato:

public class MyPersonSerializer : XmlObjectSerializer { public override bool IsStartObject(XmlDictionaryReader reader) { // ... } public override object ReadObject(XmlDictionaryReader reader, bool verifyObjectName) { // ... } public override void WriteStartObject(XmlDictionaryWriter writer, object graph) { writer.WriteStartElement("person"); } public override void WriteObjectContent(XmlDictionaryWriter writer, object graph) { Person person = graph as Person; writer.WriteStartElement("name"); writer.WriteString(person.FistName); writer.WriteEndElement(); } public override void WriteEndObject(XmlDictionaryWriter writer) { writer.WriteEndElement(); } }

L'implementazione riporta semplicemente come serializzare lo specifico oggetto Person in maniera del tutto personalizzata e, oserei dire, ottimizzata perchè libera da tutti i processi (vedi Reflection) utilizzati dal DataContractSerializer.

Il serializer può essere utilizzato per costruire il messaggio:

Message.CreateMessage(MessageVersion.Default, "*", person, new MyPersonSerializer());

Posted: Jul 14 2007, 04:01 PM by Fabio.Cozzolino | with no comments
Filed under:
Dietro le quinte ...

Quello che accade dietro le quinte difficilmente si nota. Se ne vedono solo i risultati. L'organizzazione degli eventi, ad esempio, comporta settimane se non mesi di preparazione. Dietro le quinte sono molte le persone che ci lavorano, con passione, con dedizione, rubando tempo al proprio tempo. Molto spesso di questo non si vede neanche l'ombra, ma c'è. Così come c'è DotNetSide, una macchina in continuo movimento i cui passi spesso risultano silenziosi. Nell'ombra ci lavorano diverse persone, nell'ombra molte persone danno il loro contributo, senza fare rumore, nulla.

Tra queste persone ringrazio tutte, ma una in particolare merita di essere menzionata. Nico è sempre pronto a supportare DotNetSide, lo fa con i mezzi che può, supportandoci durante gli eventi, ma soprattutto consentendoci di avere online il nostro portale, il mezzo su cui si basano le nostre comunicazioni, gli annunci, il forum, la base di partenza per i nostri eventi, in pratica il centro della nostra community.

Questo è il modo in cui Nico, e la sua società, ci supportano. E devo dire che lo fa alla grande. Perciò, dopo averlo già fatto di persona, lo ringrazio a nome di tutto lo staff per quello che fa per DotNetSide.

[OT] Il valore di una amicizia ...

L'Amico è quella persona che ti capisce, che è presente quando ne hai bisogno, che è pronto a lasciare i suoi impegni oppure, se proprio non è possibile, a richiamarti appena può.

L'Amico è pronto ad assumersi le tue responsabilità. Puoi conoscere una persona da anni e non esserle amica. Puoi conoscere una persona da 5 minuti e considerarla tua amica.

L'Amico non è colui che ti chiama tutti i giorni, ma colui che sa quando chiamarti.

L'Amico è colui che ha il coraggio di dirti le cose in faccia, anche se a suo rischio ed anche se queste potrebbero compromettere l'amicizia stessa.

L'Amico è colui che sa perdonarti anche se hai preso le chiavi della sua macchina per comprare i cornetti alle sei di mattina senza dirgli nulla, neanche dove hai poi rimesso l'auto.

L'Amico è quello che ti ferma, ti fa ragionare, ti dice che stai sbagliando, e non quello che ti dice sempre e comunque "hai fatto bene", anche se in realtà la pensa diversamente. 

L'Amico è colui che non cerca nulla da te, se non la tua amicizia.

Ci sono amici e conoscenti, i primi purtroppo sono pochi, molto pochi ...


Ps.: questo post contiente delle mie personali considerazioni e non è riferito a delle persone in particolare, ma è nato in seguito ad una serie di situazioni, belle e meno belle, della mia vita e delle persone che mi stanno accanto;

Channel9 come non l'avete mai visto e sentito prima ...

... in Italiano !!! Si perchè il nostro mitico Vittorio è riuscito nell'intento, insieme ad altri colleghi, di realizzare i contenuti anche in lingue diverse dall'inglese e il primo video in assoluto è in italiano !!!

Complimenti Vittorio e state in ascolto su Channel9 Italia

fonte: http://blogs.msdn.com/vbertocci/archive/2007/07/02/channel9-parla-italiano.aspx