2010-02-17 42 views
11

我需要使用具有Date和Time類型元素的Java Webservice。從WSDL在WCF中使用帶有日期和時間元素的Java Webservice

實施例:

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

當消耗web服務通過添加服務引用的Visual Studio 2008生成以下代碼:

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

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

在反射誤差發送消息結果與的InnerException :

'time'是SoapElementAttribute.DataType屬性的無效值。該屬性只能爲基元類型指定。

當刪除DataType =「time」和DataType =「date」屬性時,一切似乎都奏效。但修改生成的代碼是一種反模式。那麼有沒有其他方法可以使這個工作?

更新:如果日期或時間元素可以爲空

問題只存在!

我報告了微軟連接站點上的一個錯誤。如果你有同樣的問題,你可以在這裏投上一票: https://connect.microsoft.com/VisualStudio/feedback/details/534453/consuming-java-webservice-with-nullable-date-and-time-elements-in-wcf-generates-invalid-datatype-attributes

更新2:

微軟證實這是一個錯誤,並unlikly加以固定。

更新3:

我經過與VS2010,它仍然產生了錯誤的代碼。順便說一句,我們最終修改生成的代碼...

+0

http://www.headsphere.net/2007/11/java-wcf-datetime-interop.html? – 2010-02-17 09:06:49

+0

這看起來可能是一個錯誤。請通過http://connect.microsoft.com/visualstudio/報告。然後在這裏發佈錯誤報告的URL,以便其他人可以投票。 – 2010-02-17 09:07:48

+0

你在Visual Studio 2010中再次嘗試過嗎?如果是的話,仍然存在相同的錯誤? (我問,因爲我的老闆現在對WCF很瘋狂...... – 2011-05-07 17:44:53

回答

2

該bug的潛在解決方法是創建您自己的代理生成器。這與修改生成的代碼類似,但可以說更好,因爲您正在更改生成的代碼,而不是進行後期修改。

有關說明,請參見http://blogs.msdn.com/b/pedram/archive/2007/08/10/customising-wcf-proxy-generation-in-visual-studio-2008.aspx。有關您需要創建的註冊表條目路徑的注意事項:VS2010將10.0版作爲註冊表路徑中的版本,在64位Windows上,它需要在SOFTWARE\Wow6432Node\Microsoft而不是SOFTWARE\Microsoft

我不確定這是哪個生成器,並且不可能/容易,但是可以通過擴展該工具使用的類(上面鏈接中完成的操作)與WcfProxyGenerator一起使用。