2012-11-30 42 views
6

不同的日期時間我知道解決大多數人的建議是我的對象的屬性從TDateTime類型爲String改變,但我沒有訪問所有的源代碼的Web服務應用程序,所以有些情況下我無法做到這一點。所以我寧願確保我照顧這個問題。德爾福Web服務會從.NET MVC應用程序

簡單地說,我有一個.NET MVC應用程序調用寫於2005年德爾福獲得一個約會對象,包括起始日期/時間和結束日期/時間服務應用程序的Web方法。用戶可以對約會進行更改,然後MVC應用程序調用另一個Web方法,傳入修改的約會對象,供服務應用程序存儲。

的TAppointemnt的開始時間和結束時間屬性在Delphi定義爲TDateTime類型。它們以xs:dateTime的形式出現在WSDL中。 Visual Studio在Reference.cs中將它們創建爲System.DateTime。

用Delphi使用Web應用程序調試器,以及MVC應用程序的端點設置爲Web服務EXE,我可以逐步在實時兩個應用程序。我所看到的是,發送和接收的約會對象的開始時間和結束時間的屬性是相同的從Web服務到.NET MVC過去了,但時代在13小時內從.NET MVC傳遞給德爾福調整時網絡服務。

雖然我理解.NET做一些內部調整時區,當客戶機和服務器在不同的時區只應是顯而易見的。在我的情況下,客戶端瀏覽器,.NET MVC應用程序和Delphi服務應用程序是在同一個。事實上,它們都運行在同一臺機器上,所以我爲什麼會出現這種差異而感到不知所措。

它看起來像他們在編碼XML不同的日期時間...

從德爾福服務應用到.NET MVC應用程序的響應:

<StartTime xsi:type="xsd:dateTime">2012-10-29T08:00:00.000+13:00</StartTime><EndTime xsi:type="xsd:dateTime">2012-10-29T09:15:00.000+13:00</EndTime> 

從.NET MVC應用程序的POST到德爾福服務的應用程序:

<StartTime xsi:type="xsd:dateTime">2012-10-29T08:00:00</StartTime><EndTime xsi:type="xsd:dateTime">2012-10-29T09:15:00</EndTime> 
+0

13剛剛變成了一個更邪惡的數字。 –

回答

6

我發現了一個適合我的解決方案。

在我的模型中,在處理更新約會時,我傳遞了由視圖組件生成的約會對象,該約束對象不包含所有屬性。只有那些觀點。爲了完成預約,我從服務應用程序中獲取不變的版本,並根據新對象修改其屬性。

我在調試時發現的開始時間,並從服務應用程序中檢索到的wsAppointment的結束時間特性有局部一DateTimeKind,而pAppointment參數的開始時間和結束時間被設置爲未指定。因此,我傳回服務應用程序的Local DateTimeKind被Unspecified覆蓋。

爲了解決這個問題,我用DateTime.SpecifyKind明確設置Kind屬性,如下所示:

wsAppointment.StartTime = DateTime.SpecifyKind(pAppointment.StartTime, DateTimeKind.Local); 
wsAppointment.EndTime = DateTime.SpecifyKind(pAppointment.EndTime, DateTimeKind.Local); 

希望這有助於出其他人也遇到了相同或類似的問題。