2010-02-17 6 views
11

Potrzebuję spożywać Java WebService, która ma elementy typu Date i Time.Zużywanie Java WebService z elementami Data i czas w WCF

Przykład z WSDL:

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

Po spożyciu Zestawienie poprzez Dodawanie usługi Reference Visual Studio 2008 generuje następujący kod:

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

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

Wysyłanie wyników post w błąd odbicia z InnerException :

"Czas" jest nieprawidłową wartością właściwości SoapElementAttribute.DataType. Właściwość może być określona tylko dla typów pierwotnych.

Wyjmując dataType = „czas” i DataType = „date” atrybuty wszystko wydaje się działać. Ale modyfikowanie wygenerowanego kodu jest anty wzorca. Czy istnieje jakiś inny sposób, aby to zadziałało?

Aktualizacja:

Problem istnieje tylko wtedy, gdy elementy data lub godzina jest pustych!

I Zgłoszono błąd w witrynie połączenia firmy Microsoft. Jeśli masz ten sam problem można głosować go tutaj: https://connect.microsoft.com/VisualStudio/feedback/details/534453/consuming-java-webservice-with-nullable-date-and-time-elements-in-wcf-generates-invalid-datatype-attributes

Aktualizacja 2:

Microsoft potwierdziła, że ​​jest to błąd i unlikly być naprawione.

Update 3:

Sprawdziłem z VS2010 i nadal generuje zły kod. Btw, skończyło się na modyfikację kodu wygenerowanego ...

+0

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

+0

Wygląda na to, że może to być błąd. Zgłoś go na stronie http://connect.microsoft.com/visualstudio/. Następnie umieść tutaj adres URL raportu o błędzie, aby inni mogli na nim głosować. –

+0

Czy próbowałeś tego jeszcze raz w Visual Studio 2010? Jeśli tak, to czy nadal jest ten sam błąd? (Pytam, ponieważ mój pracodawca wpadł w szał z WCF w dzisiejszych czasach ... –

Odpowiedz

2

Potencjalny obejście błędu byłoby stworzyć swój własny generator proxy. Jest to podobne do modyfikacji wygenerowanego kodu, ale jest prawdopodobnie lepsze, ponieważ zmieniasz to, co jest generowane, niż robi się modyfikację postprodukcji.

Zobacz http://blogs.msdn.com/b/pedram/archive/2007/08/10/customising-wcf-proxy-generation-in-visual-studio-2008.aspx instrukcje. Uwagi dotyczące ścieżki do wpisów rejestru, które należy utworzyć: VS2010 będzie miał 10.0 jako wersję w ścieżce rejestru, aw 64-bitowym systemie Windows musi być w SOFTWARE\Wow6432Node\Microsoft, a nie SOFTWARE\Microsoft.

Nie jestem pewien, którzy generatory to jest i nie jest to możliwe/łatwe, z wyjątkiem tego, że można to zrobić za pomocą WcfProxyGenerator, rozszerzając klasę używaną przez to narzędzie (tak jest w powyższym linku).