2012-09-24 129 views
2

我有一個Silverlight應用程序調用我的WCF服務來從服務器獲取時區列表。所有時區都在服務器的函數中檢索,但我需要知道如何將這些返回給Silverlight。WCF服務通過TimeZoneInfo

我在服務器上的呼叫是低於,但我想我需要以某種方式將TimeZoneInfo序列化爲知道類型,然後才能將其傳回。這是我卡住的地方。

請問有人可以幫忙嗎?

Public Function GetTimezones() As ReadOnlyCollection(Of TimeZoneInfo) Implements ITimezoneService.GetTimezones 

    Dim timeZones As ReadOnlyCollection(Of TimeZoneInfo) = TimeZoneInfo.GetSystemTimeZones() 

    Return timeZones 

End Function 

回答

2

已知類型的列表,請參閱本http://social.msdn.microsoft.com/Forums/en/wcf/thread/f164f185-ae18-4775-a2ff-a814813d262d添加到允許TimeZoneInfo被序列化。

這將適用於完整的框架,但我沒有真正推薦它,我寧願使用ID或c# TimeZoneInfo serialization中建議的內置字符串序列化。

相反,Silverlight框架有其自己的輕量級版本TimeZoneInfo,因此將無法反序列化由完整框架序列化的TimeZoneInfo(因爲它不是相同的類型定義)。

你還應該注意的是,在默認情況下的安全參數Silverlight有隻UTCLocal(Silverlight客戶端運行的機器的語言環境)的TimeZoneInfo訪問,並使用其他時區,你需要使用提升的權限,因爲運行Silverlight的時區信息是基於註冊表的。見silverlight Time Zone convertinghttp://forums.silverlight.net/t/186363.aspx/1

最後,有些人在他們自己的Silverlight應用程序中重寫了整個或部分TimeZoneInfo類(我們也必須)。見http://forums.silverlight.net/t/165067.aspx/1。 Silverlight尚未支持本地到UTC或UTC以上的本地時區轉換。

+0

同意Paciv。你的GetTimezones()函數應該返回一個包含.Id和.DisplayName屬性的字符串對的列表。你可以用它來做你的清單。實際進行時區轉換時,請在服務器端完成。 –