2013-02-11 46 views
6

मेरी सेवा अन्य विधियों के लिए काम करती है लेकिन जब मैं एक और जटिल संग्रह के साथ एक विधि का आह्वान करने का प्रयास करता हूं तो मुझे त्रुटि मिलती है (सेवा ट्रेस व्यूअर से)डब्ल्यूसीएफ त्रुटि 'पैरामीटर को क्रमबद्ध करने का प्रयास करते समय एक त्रुटि हुई ...'

'पैरामीटर http://tempuri.org/:GetDataEventSetResult क्रमबद्ध करने का प्रयास करते समय एक त्रुटि हुई। एक ही गलती है कि मैंने देखा है वर्ग परिभाषा को बदलने शामिल बारी करने के साथ सवाल http://schemas.datacontract.org/2004/07/MimosaServerLib 'की उम्मीद नहीं है ...'

उत्तर: InnerException संदेश 'टाइप' 'के साथ डेटा अनुबंध नाम' MimosaServerLib.DAInt DAInt था 'ProxyCreationEnabled' बंद करें लेकिन जिन वर्गों के साथ मैं काम कर रहा हूं (DataEventSet, DAInt) एक ऐसी फ़ाइल से आती है जो मुझे दिया गया xsd टूल का उपयोग करके ऑटो जेनरेट किया गया है। यानी मुझे इसे बदलना नहीं चाहिए।

मैं DataEventSet वस्तु है, जो सामने आ रहा है बनाते हैं, तो जैसे:

private DataEventSet CreateDataEventSet() 
    { 
     DataEventSet aDataEventSet = new DataEventSet(); 
     DataEvent[] dataEvents = new DataEvent[2]; 
     DAInt aDAInt = new DAInt(); 
      aDAInt.id = 100100100; 
      aDAInt.value = 1; 
      dataEvents[0] = aDAInt; 
     DADataSeq aDADataSeq = new DADataSeq(); 
      aDADataSeq.id = 200100100; 
      double[] vals = new double[2]; 
       vals[0] = 5; 
       vals[1] = 44; 
      aDADataSeq.values = vals; 
      double[] vals2 = new double[2]; 
       vals2[0] = 1; 
       vals2[1] = 1; 
      aDADataSeq.xAxisDeltas = vals2; 
      aDADataSeq.xAxisStart = 0; 
      dataEvents[1] = aDADataSeq; 
     aDataEventSet.id = 0; 
     Site aSite = new Site(); 
      aSite.category = SITE_CATEGORY.SITE_SPECIFIC; 
     aDataEventSet.site = aSite; 
     OsacbmTime aTime = new OsacbmTime(); 
      aTime.tick_time = 12313246; 
      aTime.time = "2007-09-20T14:46:04.123"; 
      aTime.time_type = OsacbmTimeType.OSACBM_TIME_MIMOSA; 
     aDataEventSet.time = aTime; 
     aDataEventSet.dataEvents = dataEvents; 

     return aDataEventSet; 
    } 

संपादित करें: DataEventSet

//This source code was auto-generated by xsd 

[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.mimosa.org/OSACBMV3-1l")] 
[System.Xml.Serialization.XmlRootAttribute(Namespace="http://www.mimosa.org/OSACBMV3-1l", IsNullable=false)] 
public partial class DataEventSet { 

private bool alertStatusField; 

private bool alertStatusFieldSpecified; 

private DataEvent[] dataEventsField; 

private ulong idField; 

private Site siteField; 

private OsacbmTime timeField; 

/// <remarks/> 
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] 
public bool alertStatus { 
    get { 
     return this.alertStatusField; 
    } 
    set { 
     this.alertStatusField = value; 
    } 
} 

/// <remarks/> 
[System.Xml.Serialization.XmlIgnoreAttribute()] 
public bool alertStatusSpecified { 
    get { 
     return this.alertStatusFieldSpecified; 
    } 
    set { 
     this.alertStatusFieldSpecified = value; 
    } 
} 

/// <remarks/> 
[System.Xml.Serialization.XmlElementAttribute("dataEvents", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] 
public DataEvent[] dataEvents { 
    get { 
     return this.dataEventsField; 
    } 
    set { 
     this.dataEventsField = value; 
    } 
} 

/// <remarks/> 
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] 
public ulong id { 
    get { 
     return this.idField; 
    } 
    set { 
     this.idField = value; 
    } 
} 

/// <remarks/> 
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] 
public Site site { 
    get { 
     return this.siteField; 
    } 
    set { 
     this.siteField = value; 
    } 
} 

/// <remarks/> 
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] 
public OsacbmTime time { 
    get { 
     return this.timeField; 
    } 
    set { 
     this.timeField = value; 
    } 
} 

}

उत्तर

6

के वर्ग परिभाषा मुझे लगता है कि आप की आवश्यकता होगी KnownType(typeof(DAInt))DataEventSet कक्षा में विशेषता जोड़ने के लिए क्योंकि आप इसे बहुरूप तरीके से उपयोग कर रहे हैं। मैं आम तौर पर जेनरेट कोड में एक नई फ़ाइल में अपना परिवर्तन जोड़ता हूं जैसे DataEventSet.xsd.nongenerated.cs। यही कारण है कि जेनरेट कोड कक्षाओं को आंशिक कक्षाओं के रूप में बनाता है।

[KnownType(typeof(DAInt))] 
public partial class DataEventSet { 
} 

यदि वह काम नहीं करता है, तो आप हमेशा के बजाय XmlSerializer उपयोग करने के लिए अनुबंध को बदलने की कोशिश कर सकते हैं:

अंदर DataEventSet.xsd.nongenerated.cs, तो आप कुछ इस तरह होगा DataContractSerializer। यह अच्छी तरह से काम करना चाहिए क्योंकि यह xsd.exe द्वारा बनाए गए एक्सएमएल गुणों का उपयोग करता है।

आप निर्दिष्ट कर सकते हैं कि रनटाइम सेवा अनुबंध में XmlSerializerFormatter विशेषता जोड़ कर XmlSerializer का उपयोग करता है।

+0

धन्यवाद! यह अब डब्ल्यूसीएफ टेस्ट क्लाइंट में काम करता है। लेकिन जब मैं बाहरी क्लाइंट के साथ सेवा तक पहुंचने का प्रयास करता हूं तो मुझे 'नेटडिस्परचरफॉल्ट अपवाद' मिलता है: "http://tempuri.org/:GetDataEventSetResult। इनर एक्सेप्शन संदेश 'लाइन 1 स्थिति 898 में त्रुटि थी। तत्व' http: // schemas .datacontract.org/2004/07/MimosaServerLib: DataEvent 'में एक प्रकार से डेटा होता है जो नाम पर नक्शा करता है। " – Jimmy

+0

हल: सेवा संदर्भ lol अद्यतन करने की आवश्यकता है। – Jimmy

+0

क्या ज्ञात टाइप() विशेषता का उपयोग कर रहा था? –