2009-04-22 12 views
16

ऑपरेशन कंट्रैक्ट के पैरामीटर के लिए जो केवल दिनांक (कोई समय घटक या टाइमज़ोन डिज़ाइनर) का प्रतिनिधित्व नहीं करता है, यह किसी भी अस्पष्टता या टाइमज़ोन रूपांतरण के साथ समस्याओं से बचने के लिए xs: दिनांक का उपयोग करना वांछनीय है ग्राहक और सर्वर के बीच।एक्सएस कैसे उत्पन्न करें: डब्लूसीएफ ऑपरेशन कंट्रैक्ट पैरामीटर में दिनांक

डब्ल्यूसीएफ वर्तमान में केवल एक्सएस का समर्थन करता है: डेटटाइम पैरामीटर को क्रमबद्ध करने के लिए दिनांक समय।

एक पैरामीटर के साथ ऑपरेशन कंट्रैक्ट उत्पन्न करने का सबसे आसान तरीका क्या है जिसे xs के रूप में क्रमबद्ध किया जाएगा: दिनांक?

मैं एक कस्टम डेटटाइम से अंतर्निहित कास्टिंग के साथ एक कस्टम .NET प्रकार "सार्वजनिक संरचना दिनांक केवल" या इसी तरह के बारे में सोच रहा हूं, जो किसी भी तरह से स्वचालित रूप से wsdl को xs: दिनांक के रूप में उत्पन्न करेगा।

क्या यह संभव है, और मैं इसे लागू करने के बारे में कैसे जाउंगा?

यदि यह संभव है, तो मुझे संदेह है कि समाधान कस्टम प्रकार पर XmlSchemaProviderAttribute का उपयोग कर शामिल हो सकता है, लेकिन इस विशेषता पर मुझे जो भी दस्तावेज मिला है वह थोड़ा अपारदर्शी लगता है।

अद्यतन

मैं यह मुश्किल विश्वास करने के लिए यह एक समाधान प्राप्त करने की probablity में वृद्धि होगी लगता है, लेकिन मैं साइट की सलाह का पालन करें और एक इनाम शुरू करेंगे।

स्पष्टता के लिए, इनाम के लिए शर्त इतनी है कि एक WCF OperationContract के लिए एक पैरामीटर हो सकता है सभी जानकारी एक समाधान का निर्माण करने के लिए आवश्यक प्रदान करना है:

  • ws के रूप में धारावाहिक: दिनांक और के रूप में वर्णित जैसे जेनरेट डब्लूएसडीएल में।

  • या तो एक सिस्टम है। डेटटाइम मान या डेटटाइम से/निश्चित रूप से डाला जा सकता है।

+0

मुझे https://connect.microsoft.com/wcf/feedback/ViewFeedback.aspx?FeedbackID=349215 पर इस पर एक बंद कनेक्ट सुझाव मिला। –

उत्तर

1

दुर्भाग्य से WCF XS का समर्थन नहीं करता: दिनांक प्रकार। आप की तरह, अपने खुद के "DateOnly" struct बनाने के लिए चाहते हैं:

<DataContract()> _ 
public struct DateOnly 
    <DataMember()> public Month as Integer 
    <DataMember()> public Day as Integer 
    <DataMember()> public Year as Integer 
end struct 
+0

हां मैंने सोचा कि मुझे अपनी खुद की संरचना बनाना होगा, लेकिन मैं इसे xs के रूप में क्रमबद्ध बनाना चाहता हूं: दिनांक (कस्टम एक्सएमएल क्रमबद्धता का उपयोग करके)? ताकि गैर-डब्ल्यूसीएफ क्लाइंट जो xs को पहचानते हैं: दिनांक को अभी तक एक और कस्टम प्रकार की आवश्यकता नहीं है। – Joe

+0

मुझे फ्लाई पर डब्लूएसडीएल के एक्सएमएल को संशोधित करने के अलावा इसे बदलने के किसी भी तरीके से अवगत नहीं है। हालांकि मुझे प्रदर्शन प्रभावों के बारे में निश्चित नहीं है। यह आलेख आपकी स्थिति को पूरी तरह से संबोधित नहीं करता है लेकिन आप एसओएपी संदेश सामग्री को संशोधित करने के तरीके पर शुरू कर सकते हैं। http://blogs.msdn.com/kaevans/archive/2008/01/08/modify-message-content-with-wcf.aspx – Keith

1

WCF के defaut serializer (DataContractSerializer) इसका समर्थन नहीं करता। लेकिन XmlSerializer इसका समर्थन करता है।

1 - अपने अनुबंध को [XmlSerializerFormat] विशेषता जोड़ें ...

[XmlSerializerFormat] 
[ServiceContract] 
public interface IMyContract 
{ 
    MyType GetData(); 
} 

2 - DataContract प्रकार में, सदस्य के लिए जोड़ [XmlElement (datatype = "तिथि")]।

public class MyType 
{ 
    [XmlElement(DataType = "date")] 
    public DateTime BirthDate {get; set;} 
} 

आशा इस

+0

यह ऑपरेशन कंट्रैक्ट के लिए दिनांक पैरामीटर के लिए मदद नहीं करता है। – Joe

+1

मुझे खेद है, मुझे नहीं पता था कि आप सरल डेटटाइम पैरामीटर के बारे में बात कर रहे थे। लेकिन अगर आप [XmlSerializerFormat] पर स्विच नहीं करते हैं तो क्या आपके जटिल प्रकारों के साथ कोई समस्या नहीं होगी? – Sylvain

+0

हां, डेटामेम्बर और ऑपरेशन कंट्रैक्ट पैरामीटर के लिए एक ही समस्या मौजूद है। डेटामेम्बर के लिए, एक्सएमएल सीरियलाइजेशन का उपयोग करना एक वर्कअराउंड है (भले ही यह डेटाकंट्रैक्ट्स के कुछ फायदे खो देता है)। लेकिन मैं ऐसे समाधान की तलाश में हूं जो दोनों मामलों में काम करता है, जो माइक्रोसॉफ्ट "v.Next" के लिए विचार कर रहा है, ठीक है: https://connect.microsoft.com/wcf/feedback/ViewFeedback.aspx?FeedbackID=349215 – Joe

5

में मदद करता है अब जब कि यह मेरे ध्यान करने के लिए, मैं कनेक्ट में एक नया सुझाव बनाया है, Please Fully Support xs:Date for Date-Only Parameters and DataMembers पर आ गया है। मैंने इसे चार सितारों (महत्वपूर्ण) के साथ रेट किया।

यदि कोई इसे पढ़ता है तो यह महसूस करता है कि यह महत्वपूर्ण है (या अन्य असहमत), तो कृपया उस पर वोट करने के लिए कनेक्ट का उपयोग करें या उस पर टिप्पणी करें।

+0

एफवाईआई: मैंने आपके कनेक्ट सुझाव 4 सितारों को भी रेट किया है। – Sylvain

+0

मुझे निश्चित रूप से लगता है कि यह महत्वपूर्ण है। आपके कनेक्ट सुझाव में आप बताते हैं कि "मुझे पता है कि कोई भी [XmlSerializationFormat] का उपयोग कर सकता है ताकि डेटा अनुबंध Serializer के बजाय XML Serializer का उपयोग किया जा सके।" हालांकि यह डेटाकंट्रैक्ट्स के लिए एक समाधान है, मेरी समझ यह है कि ऑपरेशन अनुबंध पैरामीटर के लिए XML serailization निर्दिष्ट करने का कोई तरीका नहीं है। क्या यह समझ सही है? किसी भी मामले में मूल (बंद) कनेक्ट सुझाव के लिए एमएस प्रतिक्रिया इंगित करती है कि वे "v.Next" के लिए इस पर विचार कर रहे हैं (सुनिश्चित नहीं है कि इसका मतलब वी 4 या निम्न संस्करण है)। – Joe

+0

मेरा मानना ​​है कि एक्सएमएल सीरिएलाइज़र का उपयोग करने के लिए संपूर्ण सेवा अनुबंध, सेवा, या एंडपॉइंट को कॉन्फ़िगर करना संभव है। बिल्कुल यकीन नहीं है कि कैसे। –

3

आपने xs रखने की आवश्यकता निर्दिष्ट की है: ऑपरेशन में पैरामीटर के रूप में दिनांक। बात यह है कि ऐसी आवश्यकताओं को निर्दिष्ट करने का एक औपचारिक तरीका है: डब्लूएसडीएल। यदि मैं ऐसा कर रहा था तो मैं डब्ल्यूएसडीएल प्रथम दृष्टिकोण का उपयोग करूंगा। एक डब्लूएसडीएल के साथ शुरू करें जो आपके इच्छित अनुबंध को परिभाषित करता है, जिसमें एक्सएस: इंटरफ़ेस में दिनांक, जहां भी आप इसे चाहते हैं। फिर svcutil.exe का उपयोग कर सर्विस स्टब उत्पन्न करें।/Serializer में गुजरना याद रखें: xmlSerializer।

3

मुझे भी समस्या का वर्णन किया गया है। मैंने अपना स्वयं का समाधान विकसित किया है - WcfDate कस्टम प्रकार। इसे यहां प्रकाशित किया गया है: WCF Support for xs:date

संबंधित मुद्दे

 संबंधित मुद्दे