मैं वर्तमान में डब्ल्यूसीएफ को हमारे कुछ बुनियादी ढांचे को बदल रहा हूं और इस अनुत्तरित प्रश्न पर ठोकर खा रहा हूं और इसे आजमाने का फैसला किया। :)
डब्ल्यूसीएफ DateTime
और DateTimeOffset
क्रमबद्ध करता है जिस तरह से थोड़ा अजीब लगता है। निम्न नमूना पता चलता है, DateTime
का उपयोग कर बेहतर विकल्प की तरह लग रहा है जब अन्य प्लेटफार्मों के साथ काम:
using System;
using System.Runtime.Serialization;
using System.ServiceModel;
[ServiceContract]
public class DateTimeOffsetService
{
[OperationContract]
public Container DoWork()
{
return new Container
{
NowDateTime = DateTime.Now,
UtcNowDateTime = DateTime.UtcNow,
NowDateTimeOffset = DateTimeOffset.Now,
UtcNowDateTimeOffset = DateTimeOffset.UtcNow
};
}
}
[DataContract]
public class Container
{
[DataMember]
public DateTime NowDateTime { get; set; }
[DataMember]
public DateTime UtcNowDateTime { get; set; }
[DataMember]
public DateTimeOffset NowDateTimeOffset { get; set; }
[DataMember]
public DateTimeOffset UtcNowDateTimeOffset { get; set; }
}
अनुरोध की प्रतिक्रिया एक्सएमएल है:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header />
<s:Body>
<DoWorkResponse xmlns="http://tempuri.org/">
<DoWorkResult xmlns:a="http://schemas.datacontract.org/2004/07/RD.MES.WcfService" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:NowDateTime>2012-03-23T15:59:47.8328698+01:00</a:NowDateTime>
<a:NowDateTimeOffset xmlns:b="http://schemas.datacontract.org/2004/07/System">
<b:DateTime>2012-03-23T14:59:47.8328698Z</b:DateTime>
<b:OffsetMinutes>60</b:OffsetMinutes>
</a:NowDateTimeOffset>
<a:UtcNowDateTime>2012-03-23T14:59:47.8328698Z</a:UtcNowDateTime>
<a:UtcNowDateTimeOffset xmlns:b="http://schemas.datacontract.org/2004/07/System">
<b:DateTime>2012-03-23T14:59:47.8328698Z</b:DateTime>
<b:OffsetMinutes>0</b:OffsetMinutes>
</a:UtcNowDateTimeOffset>
</DoWorkResult>
</DoWorkResponse>
</s:Body>
</s:Envelope>
मैं GMT + 01.00 समय क्षेत्र में कर रहा हूँ , तो मूल्य सही के बारे में प्रतीत होता है। यह इस तरह क्यों है? खैर, डबल्यूएसडीएल को परिभाषित करता है Container
इस तरह:
<xs:schema elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/System">
<xs:import schemaLocation="http://localhost:3608/DateTimeOffsetService.svc?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/"/>
<xs:complexType name="DateTimeOffset">
<xs:annotation>
<xs:appinfo>
<IsValueType>true</IsValueType>
</xs:appinfo>
</xs:annotation>
<xs:sequence>
<xs:element name="DateTime" type="xs:dateTime"/>
<xs:element name="OffsetMinutes" type="xs:short"/>
</xs:sequence>
</xs:complexType>
<xs:element name="DateTimeOffset" nillable="true" type="tns:DateTimeOffset"/>
</xs:schema>
तो बुनियादी तौर पर, DateTime
एक मानक के रूप में xs:dateTime
(जो सही समय क्षेत्र है धारावाहिक है:
<xs:schema elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/WcfService">
<xs:import schemaLocation="http://localhost:3608/DateTimeOffsetService.svc?xsd=xsd3" namespace="http://schemas.datacontract.org/2004/07/System"/>
<xs:complexType name="Container">
<xs:sequence>
<xs:element minOccurs="0" name="NowDateTime" type="xs:dateTime"/>
<xs:element minOccurs="0" name="NowDateTimeOffset" type="q1:DateTimeOffset"/>
<xs:element minOccurs="0" name="UtcNowDateTime" type="xs:dateTime"/>
<xs:element minOccurs="0" name="UtcNowDateTimeOffset" type="q2:DateTimeOffset"/>
</xs:sequence>
</xs:complexType>
<xs:element name="Container" nillable="true" type="tns:Container"/>
</xs:schema>
और DateTimeOffset
- - डबल्यूएसडीएल में के रूप में परिभाषित किया गया है घटक) और DateTimeOffset
को गैर-मानक जटिल प्रकार में क्रमबद्ध किया गया है, जिसे कॉलर को सही ढंग से समझना और संभालना होगा।
FWIW; चूंकि मुझे यह पता चला, मैं शायद डब्ल्यूसीएफ इंटरफ़ेस के लिए DateTime
का उपयोग करूंगा जब तक कि मुझे वास्तव में अलग-अलग टाइमज़ोन ऑफसेट की देखभाल करने की आवश्यकता न हो।
वर्तमान में, केवल औचित्य मैं जटिल प्रकार (xs:dateTime
के बाद से सभी जानकारी है कि यह करता है को रोकने के लिए सक्षम होना चाहिए!) का उपयोग कर के पक्ष में देख सकता था कि DateTime
और DateTimeOffset
, एक WCF ग्राहक को क्रमानुसार करने अगर xs:dateTime
इस्तेमाल किया गया था है पता नहीं होगा कि किस प्रकार का उपयोग करना है।
एक तरफ के रूप में - डेटटाइम ऑफसेट वास्तव में मानक - ISO8601 द्वारा समर्थित है। पसंदीदा क्रमबद्धता प्रारूप इस तरह दिखता है: '2012-02-07T07: 17: 00-05: 00'। लेकिन मुझे यकीन नहीं है कि डब्ल्यूसीएफ ने कभी इसे सही तरीके से अपनाया है या नहीं। –