WCF e NHibernate

Oggi dovevo recuperare una lista di lotti dal DB passando per un servizio WCF residente sul web server per consentirmi di mettere la parte di accesso ai dati più “vicina” alla base dati stessa.

Dato che mi servivano parecchie proprietà (anche collegate a classi lungo l’albero di navigazione delle classi stesse).

La chiamata mi tornava un System.ServiceModel.ComunicationException con un messaggio di questo genere:

Errore durante la ricezione della risposta HTTP a http://*****/QueryHelper.svc. È possibile che il binding dell'endpoint del servizio non utilizzi il protocollo HTTP o che un contesto di richiesta HTTP sia stato interrotto dal server (probabilmente a causa dell'arresto del server). Per ulteriori informazioni, vedere i registri del server.

In un primo momento ho pensato ad un errore nella routine del servizio… ma il debug mi confermava che nella routine tutto era a posto…

Navigando ho trovato un articolo che indicava che un errore di questo genere deriva dal fatto che qualcosa non risulta serializzabile e per trovarlo suggeriva di usare una routine di test di questo tipo:

Public Shared Sub LogDTO(Of TDTO)(ByVal dto As TDTO)
    Dim ser As New System.Runtime.Serialization.DataContractSerializer(GetType(TDTO))
    Dim writer As New IO.FileStream("C:\temp\" + dto.[GetType]().Name + ".xml", IO.FileMode.Create)
    ser.WriteObject(writer, dto)
    writer.Close()
End Sub

In questo modo ho scoperto che il problema era nella serializzazione delle classi proxy generate da NHibernate.

Aggiunta questa ruotine alla mia cassetta degli attrezzi per futuri problemi di serializzazione Wink… sono passato all’utilizzo di un DTO per dare una veloce soluzione al problema.

Ma il dubbio mi è rimasto e stasera ho trovato un post esaustivo sull’argomento: Remoting Using WCF and NHibernate. Me lo studierò per bene.. ma mi sa che i DTO siano più maneggevoli Wink

Che EF risolva il problema?

posted @ Tuesday, October 21, 2008 6:03 PM

Print

Comments on this entry:

# re: WCF e NHibernate

Left by Tommaso Caldarola at 10/22/2008 9:48 AM
Gravatar
Se il servizio WCF deve essere consumato da soli client .Net la soluzione proposta nell'articolo è più che leggittima, viceversa non legarsi alla serializzazione .Net è per rendere il servizio indipendente dalla piattaforma.
Comments have been closed on this topic.
«January»
SunMonTueWedThuFriSat
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678