2011-03-02 17 views
5

हैंडलिंग मैंने सेवा संचालन के साथ एक डब्ल्यूसीएफ डेटा सेवा बनाई है।डब्ल्यूसीएफ डेटा सेवा त्रुटि

मैं एक प्रकार का व्यवसाय अपवाद उत्पन्न करना चाहता हूं। मैं WebFaultException उत्पन्न करने का प्रयास करता हूं लेकिन मुझे यह नहीं लगता कि क्लाइंट पक्ष पर यह त्रुटि कैसा पकड़ें जब यह त्रुटि किसी सेवा संचालन द्वारा फेंक रही हो।

[WebGet] 
public void GenerateException() 
{ 
    throw new DataServiceException(403, "Custom Message"); 
} 

यहाँ मेरे मुवक्किल है:

यहाँ एक अपवाद अनुकरण करने के लिए मेरी सेवा ऑपरेशन है

WebClient wc = new WebClient(); 
wc.DownloadString(
    new Uri(
     "http://localhost:27820/WcfDataService1.svc/GenerateException" 
    ) 
); 

DownloadString एक अपवाद फेंक रहा है, लेकिन यह केवल Internal Server Error, मैं नहीं देख सकता है मेरी Custom Message

कोई विचार?

बहुत धन्यवाद।

+0

हाय, आप कभी भी अपना समस्या का समाधान मिला? मैं एक ही स्थिति में हूं और मेरे पास कुछ भी नहीं है:/ – Mathieu

उत्तर

3

DataServiceException फेंकना सबसे अच्छा है। डब्ल्यूसीएफ डाटा सर्विस रनटाइम जानता है कि गुणों को HTTP प्रतिक्रिया में कैसे मैप करना है और हमेशा इसे TargetInvocationException में लपेटें।

फिर आप इतने की तरह अपने DataService में HandleException अधिभावी द्वारा ग्राहक उपभोक्ता के लिए यह खोल कर सकते हैं:

/// <summary> 
    /// Unpack exceptions to the consumer 
    /// </summary> 
    /// <param name="args"></param> 
    protected override void HandleException(HandleExceptionArgs args) 
    { 
     if ((args.Exception is TargetInvocationException) && args.Exception.InnerException != null) 
     { 
      if (args.Exception.InnerException is DataServiceException) 
       args.Exception = args.Exception.InnerException as DataServiceException; 
      else 
       args.Exception = new DataServiceException(400, args.Exception.InnerException.Message); 
     } 
    } 
3

आप उपयोग कर सकते हैं WCF FaultContract फेंक और एक businzess अपवाद को संभालने के लिए श्रेय दें।

Link देखें, Example

+0

इस प्रश्न को ढूंढने के लिए धन्यवाद और फिर अपना परिणाम पोस्ट करने के लिए धन्यवाद। इससे बहुत मदद मिली। –

0

मैं AllRead को सेट EntitySetAccessRule उपयोग करते हुए मेरे 403 त्रुटि हल:

  config.SetEntitySetAccessRule("*", EntitySetRights.AllRead); 
संबंधित मुद्दे