मैं अपने अनुप्रयोगों में सबसे अच्छा उपयोग पैटर्न निर्धारित करने के लिए FaultException और FaultException < टी > का उपयोग कर के साथ प्रयोग कर रहा हूँ। हमें एसओएपी 1.1 और एसओएपी 1.2 क्लाइंट सहित डब्ल्यूसीएफ के साथ-साथ गैर-डब्ल्यूसीएफ सेवा उपभोक्ताओं/ग्राहकों का समर्थन करने की आवश्यकता है।नेट WCF दोष गलत SOAP 1.1 faultcode मूल्यों पैदा
एफवाईआई: एसओएपी 1.2 सेमेन्टिक्स में wsHttp बाइंडिंग परिणामों के साथ FaultExceptions का उपयोग करते हुए, बुनियादी एचटीपीबींडिंग परिणामों के साथ FaultExceptions का उपयोग SOAP 1.1 semantics में करते हैं।
throw new FaultException<FaultDetails>(
new FaultDetails("Throwing FaultException<FaultDetails>."),
new FaultReason("Testing fault exceptions."),
FaultCode.CreateSenderFaultCode(new FaultCode("MySubFaultCode"))
);
FaultDetails वर्ग सिर्फ एक साधारण परीक्षण वर्ग के रूप में आप नीचे देख सकते हैं कि एक स्ट्रिंग "संदेश" प्रॉपर्टी वाला है:
मैं एक FaultException <FaultDetails> फेंकने के लिए निम्नलिखित कोड का उपयोग कर रहा।
जब प्रतिक्रिया wsHttpBinding उपयोग कर रहा है:
<?xml version="1.0" encoding="utf-16"?>
<Fault xmlns="http://www.w3.org/2003/05/soap-envelope">
<Code>
<Value>Sender</Value>
<Subcode>
<Value>MySubFaultCode</Value>
</Subcode>
</Code>
<Reason>
<Text xml:lang="en-US">Testing fault exceptions.</Text>
</Reason>
<Detail>
<FaultDetails xmlns="http://schemas.datacontract.org/2004/07/ClassLibrary" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Message>Throwing FaultException<FaultDetails>.</Message>
</FaultDetails>
</Detail>
यह सोप 1.2 विनिर्देश के अनुसार सही लग रहा है। मुख्य/रूट "कोड" "प्रेषक" है, जिसमें "MySubFaultCode" का "सबकोड" है। यदि सेवा उपभोक्ता/ग्राहक WCF का उपयोग कर रहा है तो क्लाइंट पक्ष पर FaultException भी उसी संरचना की नकल करता है, faultException.Code.Name "प्रेषक" और faultException.Code.SubCode.Name "MySubFaultCode" होने के साथ।
जब प्रतिक्रिया basicHttpBinding उपयोग कर रहा है:
<?xml version="1.0" encoding="utf-16"?>
<s:Fault xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<faultcode>s:MySubFaultCode</faultcode>
<faultstring xml:lang="en-US">Testing fault exceptions.</faultstring>
<detail>
<FaultDetails xmlns="http://schemas.datacontract.org/2004/07/ClassLibrary" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Message>Throwing FaultException<FaultDetails>.</Message>
</FaultDetails>
</detail>
</s:Fault>
यह सही नहीं लगता है। एसओएपी 1.1 चश्मे को देखते हुए, मैं "गलती कोड" का मान रखने की उम्मीद कर रहा था, जब मैं FaultCode.CreateSenderFaultCode (नया FaultCode ("MySubFaultCode") का उपयोग करता हूं तो "s: Client.MySubFaultCode" का मान रखने के लिए। इसके अलावा एक डब्ल्यूसीएफ क्लाइंट को गलत संरचना मिलती है। FaultException.Code.Name "प्रेषक" होने के बजाय "MySubFaultCode" है, और faultException.Code.SubCode faultException.Code.SubCode.Name के बजाय शून्य है "MySubFaultCode"। इसके अलावा, faultException.Code.IsSenderFault गलत है।
इसी समस्या है जब FaultCode.CreateReceiverFaultCode (नई FaultCode ("MySubFaultCode")) का उपयोग:
- काम करता है के रूप में सोप 1.2
- के लिए उम्मीद उत्पन्न Server.MySubFaultCode: के बजाय "एस" रों MySubFaultCode " "और faultException.Code.IsReceiverFault सोप 1,1
इस आइटम में भी 2006 में http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=669420&SiteID=1 पर किसी और के द्वारा पोस्ट किया गया था के लिए गलत है और कोई भी इसका उत्तर दिया। मुझे यह विश्वास करना बहुत मुश्किल लगता है कि अभी तक कोई भी इसमें भाग नहीं चुका है।
यहाँ किसी और इसी तरह की एक समस्या हो रही है: http://forums.microsoft.com/msdn/ShowPost.aspx?PostID=3883110&SiteID=1&mode=1
माइक्रोसॉफ्ट कनेक्ट बग: https://connect.microsoft.com/wcf/feedback/ViewFeedback.aspx?FeedbackID=367963
कैसे दोष काम करना चाहिए का विवरण: http://blogs.msdn.com/drnick/archive/2006/12/19/creating-faults-part-3.aspx
Am मैं कुछ गलत कर या इस सही मायने में एक बग है डब्ल्यूसीएफ में?