मैं डब्ल्यूसीएफ वेब सेवा के लिए एक यूनिट टेस्ट लिख रहा हूं। मैं जानबूझ कर सर्वर पर एक अमान्य अनुरोध भेज रहा हूं जो WebExceptionFault<string>
फेंकता है। यूनिट टेस्ट में, InnerException
संपत्ति में मानक WebException
के साथ पकड़ा गया अपवाद EndpointNotFoundException
है। मैं सत्यापित करना चाहता हूं कि प्रतिक्रिया का शरीर स्ट्रिंग से मेल खाता है जो मुझे लगता है कि वहां होना चाहिए।आंतरिक अपवाद की संपत्तियां खारिज कर दी गई हैं?
मैं एक समस्या में आ रहा हूं, हालांकि Response
WebException
(जो 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 के गुणों निपटारा कर रहे हैं? क्या इसके आसपास कोई रास्ता है?
उम्मीद की जा करने के लिए है कि निर्माण। System.Net यह मानने वाला नहीं है कि जो भी अपवाद पकड़ता है वह प्रतिक्रिया स्ट्रीम खोदने और इसे निपटाने की परेशानी से गुज़रने जा रहा है। तो यह फेंकने से पहले साफ हो जाता है। आप इस व्यवहार को नहीं बदल सकते हैं। –
निश्चित रूप से अंतर्निहित कनेक्शन बंद होने पर आपको प्रतिक्रिया स्ट्रीम तक पहुंचने में सक्षम नहीं होना चाहिए? उस बिंदु पर, जब तक आप 'EndPointNotFoundException' अपवाद को संसाधित करना शुरू करते हैं तब तक आपने लगभग निश्चित रूप से इसे बंद कर दिया है। मुझे लगता है कि आपको बस अपवाद को संसाधित करना शुरू कर देना चाहिए क्योंकि इसे प्रतिक्रिया स्ट्रीम में तुरंत पकड़ा जाता है और इसे लपेटता है। –
@ जेफ: उपरोक्त उदाहरण में अंतर्निहित कनेक्शन कब बंद है? प्रतिक्रिया स्ट्रीम पढ़ने के लिए सबसे पुराना बिंदु मैं 'HttpWebResponse' प्राप्त करने के बाद देख सकता हूं। क्या आपका मतलब है? – Clivest