2010-02-25 11 views
5

मैं WSE से WCF पर एक वेब सेवा क्लाइंट माइग्रेट कर रहा हूं।क्या डब्ल्यूसीएफ के साथ एक सोपएक्सप्शन को एक फाल्टएक्सप्शन में परिवर्तित करना संभव है?

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

इस परियोजना में गलती और त्रुटि प्रबंधन का परीक्षण करने के लिए परीक्षण मामलों का एक विस्तृत सूट है जो अभी भी सोपएक्सप्शन पर निर्भर करता है। विभिन्न कारणों से, मैं उन सभी को फिर से लिखना पसंद नहीं करूंगा।

क्या सोपएक्सप्शन को केवल FaultException में परिवर्तित करना संभव है और इस प्रकार नए त्रुटि हैंडलिंग कोड के खिलाफ पुराने परीक्षण केस चला रहे हैं?

+0

मुझे यह वही समस्या थी, और जब मैंने देखा कि इस सवाल के जवाब कितने खराब थे, तो मैं बहुत चिंतित था। मैं आशा करता हूं कि किसी ने इसे नोटिस किया है, भले ही यह बहुत पुराना हो। –

+0

कूल, लेकिन मुझे लगता है कि यह संभव नहीं है। मैं इस परियोजना पर काम नहीं कर रहा हूं और अब काम नहीं कर रहा हूं। आईआईआरसी, मैं बस कड़वी गोली निगलने और हर जगह इसे बदलने के समाप्त हो गया। लेकिन मुझे कोई विवरण याद नहीं है। –

+0

1 चीज़ के लिए, मुझे लगता है कि शब्द ने इसे उलट दिया है, क्या आप FaultExceptiom -> SoapException (परीक्षण के लिए) नहीं चाहते हैं? –

उत्तर

1

संदेश निरीक्षक का उपयोग कर के बारे में क्या: यह कैसे (छद्म कोड) में मदद मिलेगी की

उदाहरण? क्या आपने IClientMessageInspector चेक किया है?

वह ऐसा दिखाई हो सकता है:

संदेश निरीक्षक

public class MessageInspector : IClientMessageInspector 
{ 
    ... 

    #region IClientMessageInspector Members 
    public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply, object correlationState) 
    { 
     //rethrow your exception here, parsing the Soap message 
     if (reply.IsFault) 
     { 
      MessageBuffer buffer = reply.CreateBufferedCopy(Int32.MaxValue); 
      Message copy = buffer.CreateMessage(); 
      reply = buffer.CreateMessage(); 

      object faultDetail = //read soap detail here; 

      ... 
     } 
    } 
    #endregion 

    ... 
} 

endpoint व्यवहार

public class MessageInspectorBehavior : IEndpointBehavior 
{ 
    ... 

    #region IEndpointBehavior Members 
    public void ApplyClientBehavior(ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.ClientRuntime clientRuntime) 
    { 
     MessageInspector inspector = new MessageInspector(); 
     clientRuntime.MessageInspectors.Add(inspector); 
    } 
    #endregion 

    ... 
} 

http://weblogs.asp.net/paolopia/archive/2007/08/23/writing-a-wcf-message-inspector.aspx

मुझे लगता है कि एक अच्छा अभ्यास use exceptions as faults too है।

+0

जेएसबैंग्स, मैं आपको यह बताने के लिए भरोसा करता हूं कि यह आपके लिए काम करता है, इस मामले में मैं इसे एक स्वीकृत उत्तर के रूप में चिह्नित करूंगा। (केवल मैं आपके बक्षीस को अभी सही कर सकता हूं, सही?) –

+0

यह देखते हुए कि जेएसबैंग ने आपको अपना बक्षीस दिया है, मैं इसे स्वीकृत उत्तर के रूप में चिह्नित करूंगा। मैं तुरंत नहीं देखता कि यह कैसे संबंधित है और जांच के साधन नहीं हैं, हालांकि। –

2

कैसे

SoapException पकड़ने और FaultException फेंक (एक समाधान है, न कि सिफारिश) के बारे में

catch(SoapException) 
{ 
throw new FaultException(); // something similar 
} 
+0

मुझे शायद यह नहीं कहा जाना चाहिए था "सोपएक्सप्शन को एक फाल्टएक्सप्शन में लपेटें" (अब संपादित किया गया है) क्योंकि यह काफी भ्रामक था। बेशक मैं FaultException को SoapException (यानी कोड, संदेश, विवरण इत्यादि) के सभी गुणों को संरक्षित करना चाहता हूं, ताकि इकाई परीक्षण त्रुटि हैंडलिंग कोड पर मौजूदा आवेषण चला सकें। –

0

आप इस में एक खास सीमा पर EnterpriseLibrary उपयोग करने के लिए एक SoapException को FaultException कन्वर्ट करने के लिए सक्षम होना चाहिए केस क्लाइंट प्रॉक्सी।

+0

फिर से, मैं * से * एक साबुन अपवाद * से * एक FaultException को परिवर्तित करना चाहता हूं, न कि दूसरी तरफ! लेकिन मैं एंटरप्राइज़ लाइब्रेरी में देखूंगा, धन्यवाद। –

-1

आप IErrorHandler Interface को लागू करने का प्रयास कर सकते हैं। हैंडलरर विधि में, सोपएक्सप्शन पर लिपटे अपवाद को दोहराएं। लेटर आपको इसे वैश्विक रूप से पंजीकृत करना होगा (web.config या जो कुछ भी)।

public SoapErrorHandler : IErrorHandler 
{ 
    public void HandleError(Exception ex) 
    { 
     throw new SoapException(ex.Message, ex); 
    } 
} 
+0

मुझे यकीन नहीं है कि मैं समझता हूं कि इससे * * एक सोपएक्सप्शन * से * एक FaultException * में कनवर्ट करने में मेरी मदद कैसे होगी। –

+0

मैंने छद्म कोड उदाहरण जोड़ा है, उम्मीद है कि इससे मदद मिलती है। –

+0

क्षमा करें, अभी भी गलत दिशा। :) मुझे लगता है कि यह मदद करेगा अगर मैं एक FaultException को एक साबुन अपवाद में परिवर्तित करना चाहता था। हालांकि, जैसा कि ऊपर बताया गया है, मैं नहीं करता हूं। –

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