2009-09-04 20 views
5

के साथ डेटाटेबल ऑब्जेक्ट्स लौटाना यह एक अजीब समस्या है कि मैं डब्ल्यूसीएफ के साथ प्रतिक्रिया में डेटाटेबल भेजने की कोशिश कर रहा हूं।डब्ल्यूसीएफ सेवा

[ServiceContract] 
public interface ISapphireDataService { 
    [OperationContract] 
    DataTable LoadData(string query, DateTime start, DateTime end); 

    [OperationContract] 
    string LoadDataTest(); 
} 

और तरीकों में से निम्नलिखित कार्यान्वयन (जहां प्रदाता एक वर्ग डेटाबेस फोन करेगा और वापस लौटता है कि एक DataTable है): मैं निम्नलिखित सेवा अनुबंध है अब

public DataTable LoadData(string query, DateTime start, DateTime end) { 
    //DataSet temp = new DataSet(); 
    //temp.Tables.Add(provider.LoadData(query, start, end).Copy()); 
    //return temp; 

    return provider.LoadData(query, start, end).Copy(); 
} 

public string LoadDataTest() { 
    return "Hello World!"; 
} 

, जब मैं इस तरह इसे छोड़, मैं हमेशा एक त्रुटि जब LoadData (...) विधि बुला मिलती है: जबकि http://localhost:8731/Design_Time_Addresses/DataProviderServiceLibrary/SapphireDataService/ करने के लिए HTTP प्रतिक्रिया प्राप्त

एक त्रुटि हुई। यह HTTP प्रोटोकॉल का उपयोग न करने वाले सेवा एंडपॉइंट बाध्यकारी के कारण हो सकता है।
यह HTTP अनुरोध संदर्भ के कारण भी हो सकता है सर्वर द्वारा छोड़ा गया (संभवतः सेवा बंद होने के कारण)।
अधिक जानकारी के लिए सर्वर लॉग देखें।

यह अजीब है क्योंकि सेवा wsHttp बाइंडिंग का उपयोग करने के लिए कॉन्फ़िगर किया गया है, जिसे मैं HTTP प्रोपोकॉल का उपयोग करता हूं। यह त्रुटि तब नहीं होती है जब मैं LoadDataTest() विधि को कॉल करने का प्रयास करता हूं!

तो मैंने जो किया है, वह मुझे इस डेटा को डेटाबेस से डेटासेट ऑब्जेक्ट में प्राप्त कर लिया गया है और यह काम करता है! इस तरह की कोई गलती या कुछ भी नहीं। लेकिन, डेटासेट में लौटाई गई तालिका ईएमपीटीई थी। सभी फ़ील्ड रिक्त थे और कोई डेटा स्थानांतरित कर दिया गया है/de-धारावाहिक ठीक से, ऐसा लगता है :(

यह एक आम मुद्दा हो रहा है, लेकिन मैं अभी तक यह है कि काम करता है। कोई भी विचार करने के लिए एक जवाब को देखने के लिए कर रहा हूँ?

+1

मूल रूप से सिर्फ सलाह का एक शब्द: नहीं ! :-) –

उत्तर

6

जबकि मैं मानता हूं कि सेवाओं के माध्यम से डेटासेट और डेटाटेबल्स भेजना बीएडी है और मैंने वास्तव में इसे बदल दिया है, इसलिए मैं ऐसा नहीं कर रहा हूं, समस्या की जड़ कहीं और झूठ बोल रही है।

उन लोगों के लिए जो डेटाटेबल्स/डेटासेट्स का उपयोग करने के लिए पूरी तरह से हैं, मुझे जो त्रुटि मिल रही थी वह इसलिए था क्योंकि मैं एक डीबीएनयूएल ऑब्जेक्ट भेजने की कोशिश कर रहा था। मुझे लगता है कि यह धारावाहिक नहीं है या इसे भेजने के लिए कुछ अन्य कारण हैं।

डीबीएनयूएल को मैन्युअल रूप से "कनवर्ट करना" के बाद (मुझे डेटा को अपने स्वयं के कस्टम डेटा कंट्रैक्ट में निकालने के लिए ऐसा करना था), त्रुटि समाप्त हो गई और यह काम किया!

+2

आपने मेरे बाल – Esen

7

का उपयोग डेटासेट और DataTables सबसे अच्छा अभ्यास नहीं कर रहे हैं वे बहुत भारी होते हैं, सबसे अच्छा dataclasses का एक संग्रह (पोको के/डीटीओ का)

कुछ पृष्ठभूमि जानकारी का उपयोग करें:।।

Returning DataSets from WebServices is the Spawn of Satan and Represents All That Is Truly Evil in the World

+2

@rdkleine: आपको इस पर टिप्पणी करने के बजाय अपना उत्तर संपादित करना चाहिए। –

17

मुझे पता है कि यह एक पुराना सवाल है, लेकिन हो सकता है कि कोई अभी भी एक ही समस्या का अनुभव कर रहा हो (जैसे मैंने किया)। मैं एक ही भ्रामक त्रुटि संदेश के साथ सामना किया और मेरे सिर पीटने घंटे बिताए जब यह मुझे मारा गया था ....

public DataTable GetDataTable() 
    { 
     DataTable dt = new DataTable(**"MY_NAME"**); 
     dt.Columns.Add("ID", typeof(int)); 
     dt.Columns.Add("Caption", typeof(string)); 

     dt.Rows.Add(new object[] { 1, "hooray!" }); 
     return dt; 
    } 

आप अपने DataTable एक नाम देना चाहिए, मैं एक अतिभारित निर्माता और कोई और अधिक त्रुटियों का इस्तेमाल किया!

संपादित करें: बेशक, आपको वास्तव में डब्लूसीएफ सेवा से रिटर्न प्रकार के रूप में डेटाटेबल या डेटासेट का उपयोग नहीं करना चाहिए। मेरे लिए यह केवल परीक्षण उद्देश्यों के लिए था, क्योंकि मैंने सोचा था कि यह डेटाबेस से बाहर और तार से बाहर निकलने का सबसे तेज़ तरीका है .... लड़का मैं गलत था :)

+0

उपरोक्त बचाया। यह अभी तक एक और quirk है मैंने कभी नहीं सुना है! – Alexandra

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