2010-02-17 14 views
11

È necessario utilizzare un servizio Web Java con elementi di tipo Data e Ora.Consumo di servizi Web Java con elementi Data e ora in WCF

Esempio dal wsdl:

... 
<xsd:element name="fromTime" nillable="true" type="xsd:time" /> 
<xsd:element name="dateOfInspection" type="xsd:date" /> 
... 

Quando si consumano il webservice tramite Aggiungi servizio di riferimento di Visual Studio 2008 genera il seguente codice:

[System.Xml.Serialization.SoapElementAttribute(DataType="time", IsNullable=true)] 
public System.Nullable<System.DateTime> fromTime { ... } 

[System.Xml.Serialization.SoapElementAttribute(DataType="date")] 
public System.DateTime dateOfInspection { ... } 

Invio di un messaggio Risultati in un errore di riflessione con l'innerException :

'ora' è un valore non valido per la proprietà SoapElementAttribute.DataType. La proprietà può essere specificata solo per i tipi primitivi.

Quando si rimuovono gli attributi DataType = "time" e DataType = "date" tutto sembra funzionare. Ma la modifica del codice generato è un modello anti. Quindi c'è un altro modo per farlo funzionare?

Aggiornamento:

Il problema esiste solo se gli elementi di data o ora sono annullabili!

Ho segnalato un errore nel sito di connessione di Microsofts. Se avete lo stesso problema si può votare fino qui: https://connect.microsoft.com/VisualStudio/feedback/details/534453/consuming-java-webservice-with-nullable-date-and-time-elements-in-wcf-generates-invalid-datatype-attributes

Aggiornamento 2:

Microsoft ha confermato che è un bug e unlikly da fissare.

Update 3:

Ho controllato con VS2010 e genera ancora il codice errato. A proposito, abbiamo finito per modificare il codice generato ...

+0

http://www.headsphere.net/2007/11/java-wcf-datetime-interop.html? –

+0

Sembra che potrebbe essere un bug. Si prega di segnalarlo a http://connect.microsoft.com/visualstudio/. Quindi pubblica qui l'URL del bug report, in modo che altri possano votarlo. –

+0

Hai provato di nuovo in Visual Studio 2010? Se è così, lo stesso bug è ancora lì? (Chiedo perché il mio datore di lavoro sta impazzendo con WCF in questi giorni ... –

risposta

2

Una potenziale soluzione per il bug sarebbe creare il proprio generatore di proxy. Questo è simile alla modifica del codice generato, ma è discutibilmente migliore perché stai cambiando ciò che viene generato, piuttosto che fare una modifica post-generazione.

Vedere http://blogs.msdn.com/b/pedram/archive/2007/08/10/customising-wcf-proxy-generation-in-visual-studio-2008.aspx per istruzioni. Note relative al percorso delle voci di registro che è necessario creare: VS2010 avrà 10.0 come versione nel percorso del Registro di sistema e su Windows 64 bit deve essere in SOFTWARE\Wow6432Node\Microsoft, non in SOFTWARE\Microsoft.

Non sono sicuro di quali generatori questo sia e non sia possibile/facile, eccetto che è possibile farlo con WcfProxyGenerator estendendo la classe utilizzata da tale strumento (è ciò che viene fatto nel collegamento precedente).