2011-06-25 12 views
5

मैं डब्ल्यूसीएफ वेब सेवा के लिए एक यूनिट टेस्ट लिख रहा हूं। मैं जानबूझ कर सर्वर पर एक अमान्य अनुरोध भेज रहा हूं जो WebExceptionFault<string> फेंकता है। यूनिट टेस्ट में, InnerException संपत्ति में मानक WebException के साथ पकड़ा गया अपवाद EndpointNotFoundException है। मैं सत्यापित करना चाहता हूं कि प्रतिक्रिया का शरीर स्ट्रिंग से मेल खाता है जो मुझे लगता है कि वहां होना चाहिए।आंतरिक अपवाद की संपत्तियां खारिज कर दी गई हैं?

मैं एक समस्या में आ रहा हूं, हालांकि ResponseWebException (जो System.Net.SyncMemoryStream है) की संपत्ति को खारिज कर दिया गया है और पढ़ा नहीं जा सकता है।

मेरे कोड:

Clubs actual; 
try 
{ 
    //"201" is an invalid argument for the first parameter 
    actual = new Clubs(channel.GetClubs("201", "123")); 
} 
catch (EndpointNotFoundException e) 
{ 
    WebException w = e.InnerException as WebException; 
    Assert.IsNotNull(w); 

    HttpWebResponse resp = w.Response as HttpWebResponse; 
    Assert.IsNotNull(resp); 
    Assert.AreEqual(resp.StatusCode, HttpStatusCode.NotFound); 
    //Next line throws an ArgumentException saying Stream not readable 
    //Investigation shows it has been disposed 
    using (StreamReader sr = new StreamReader(resp.GetResponseStream())) 
     Assert.AreEqual(sr.ReadToEnd(), "League not allowed for selected club"); 
} 

यह सामान्य है कि InnerException के गुणों निपटारा कर रहे हैं? क्या इसके आसपास कोई रास्ता है?

+8

उम्मीद की जा करने के लिए है कि निर्माण। System.Net यह मानने वाला नहीं है कि जो भी अपवाद पकड़ता है वह प्रतिक्रिया स्ट्रीम खोदने और इसे निपटाने की परेशानी से गुज़रने जा रहा है। तो यह फेंकने से पहले साफ हो जाता है। आप इस व्यवहार को नहीं बदल सकते हैं। –

+0

निश्चित रूप से अंतर्निहित कनेक्शन बंद होने पर आपको प्रतिक्रिया स्ट्रीम तक पहुंचने में सक्षम नहीं होना चाहिए? उस बिंदु पर, जब तक आप 'EndPointNotFoundException' अपवाद को संसाधित करना शुरू करते हैं तब तक आपने लगभग निश्चित रूप से इसे बंद कर दिया है। मुझे लगता है कि आपको बस अपवाद को संसाधित करना शुरू कर देना चाहिए क्योंकि इसे प्रतिक्रिया स्ट्रीम में तुरंत पकड़ा जाता है और इसे लपेटता है। –

+0

@ जेफ: उपरोक्त उदाहरण में अंतर्निहित कनेक्शन कब बंद है? प्रतिक्रिया स्ट्रीम पढ़ने के लिए सबसे पुराना बिंदु मैं 'HttpWebResponse' प्राप्त करने के बाद देख सकता हूं। क्या आपका मतलब है? – Clivest

उत्तर

0

एक अपवाद क्रमबद्धता मुद्दा लगता है। आप जाल करने के लिए सर्वर पर त्रुटि हो सकता है और कस्टम एक त्रुटि संदेश

How to serialize an Exception object in C#?

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