2011-10-05 20 views
5

यह मुझे पूरे दिन पागल कर रहा है, क्योंकि मैंने कोई बदलाव नहीं किया है, फिर भी मैं कसम खाता हूं कि जिस तरह से मैंने कल इरादा किया था।पॉलिमॉर्फिक डेटाकंट्रैक्ट्स के साथ आरईएसटी - Deserialization विफलता

[ServiceContract] 
public interface IPhoneFeaturesManagementHost 
{ 
    [OperationContract] 
    [WebInvoke(Method = "POST", UriTemplate = "/accounts/{accountNumber}/phoneNumbers/{phoneNumber}/features/{featureType}", RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Bare)] 
    void UpdateFeatureStatus(string accountNumber, string phoneNumber, string featureType, FeatureUpdateRequest updateRequest); 
} 

मैं भी है निम्नलिखित प्रकार परिभाषित:

[DataContract] 
[KnownType(typeof(One900FeatureUpdateRequest))] 
public abstract class FeatureUpdateRequest 
{ 
    [DataMember] 
    public FeatureStatus Status { get; set; } 

    [DataMember] 
    public DateTime EffectiveDate { get; set; } 

    public string AccountNumber { get; set; } 
    public string PhoneNumber { get; set; } 
    public string UserId { get; set; } 
    public DateTime Timestamp { get; set; } 

    public override string ToString() 
    { 
     return String.Format("Status: {0}, Effective Date: {1}", Status, EffectiveDate); 
    } 
} 

[DataContract] 
public class One900FeatureUpdateRequest : FeatureUpdateRequest 
{ 
    [DataMember] 
    public bool PerformSwitchUpdate { get; set; } 
} 

कल मैं कसम खाता हूँ मैं के बाद डेटा सबमिट करने में सक्षम था

मैं एक WCF 4 बाकी सेवा निम्न अनुबंध के साथ परिभाषित किया गया है यह फ़ॉर्म:

<One900FeatureUpdateRequest> 
    <EffectiveDate>1999-05-31T11:20:00</EffectiveDate> 
    <Status>Enabled</Status> 
    <PerformSwitchUpdate>true</PerformSwitchUpdate> 
</One900FeatureUpdateRequest> 

आज एक्सएमएल का एक ही बैच HTTP 400 त्रुटियों के कारण है संदेश निम्न:

Unable to deserialize XML body with root name 'One900FeatureUpdateRequest' and root namespace '' (for operation 'UpdateFeatureStatus' and contract ('IPhoneFeaturesManagementHost', 'http://tempuri.org/')) using DataContractSerializer. Ensure that the type corresponding to the XML is added to the known types collection of the service. 

केवल XML आज काम करने के लिए लगता है कि नीचे है, और मैं वास्तव में सच में एक नाम स्थान जोड़ने के साथ साथ मेरे बच्चे DataContract के उप-प्रकार का वर्णन करने के गुण की आवश्यकता नापसंद करते हैं।

<FeatureUpdateRequest i:type="One900FeatureUpdateRequest" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Project.Services.Host"> 
    <EffectiveDate>1999-05-31T11:20:00</EffectiveDate> 
    <Status>Enabled</Status> 
    <PerformSwitchUpdate>true</PerformSwitchUpdate> 
</FeatureUpdateRequest> 

किसी को भी मैं जो कुछ भी स्पर्श हो सकता है या क्या मैं आदेश वापस अक्रमांकन के लिए पहले सरल XML स्वरूप को प्राप्त करने के लिए बदलने के लिए आवश्यकता हो सकती है के रूप में किसी भी विचार है?

किसी भी मदद की बहुत सराहना की जाएगी। धन्यवाद!

+0

अमूर्त कुंजी –

+0

को निकालने का प्रयास करें और इसे दुर्भाग्य से कोई फर्क नहीं पड़ता। हालांकि धन्यवाद! –

उत्तर

1

मुझे डेटाकंट्रैक्टसेरियलाइज़र के साथ ऐसा करने का कोई तरीका नहीं मिला, इसलिए मैंने पुराने XmlSerializer पर स्विच किया ताकि मैं एक्सएमएल प्रारूप पर प्रत्यक्ष नियंत्रण रख सकूं। यह काम करने लग रहा था।

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