2009-04-29 23 views
8

जब मैं अपनी डब्ल्यूसीएफ सेवा को कॉल करता हूं तो मुझे नीचे त्रुटि मिल रही है। मुझे यहां क्या समझ नहीं आ रहा है?मुझे यह डब्ल्यूसीएफ त्रुटि संदेश क्यों मिल रहा है?

'System.String[]' with data contract name 
'ArrayOfstring:http://schemas.microsoft.com/2003/10/Serialization/Arrays' 
is not expected. Add any types not known statically to the list of known 
types - for example, by using the KnownTypeAttribute attribute or by adding 
them to the list of known types passed to DataContractSerializer.'. Please 
see InnerException for more details. 

{"There was an error while trying to serialize parameter 
http://tempuri.org/:myEntity. The InnerException message was 
'Type 'System.String[]' with data contract name 
'ArrayOfstring:http://schemas.microsoft.com/2003/10/Serialization/Arrays' 
is not expected. Add any types not known statically to the list of known 
types - for example, by using the KnownTypeAttribute attribute or by adding 
them to the list of known types passed to DataContractSerializer.'. 

Please see InnerException for more details."} 
+1

क्या आप अपनी सेवा और/या ग्राहक को कोड पोस्ट कर सकते हैं? –

+0

डब्ल्यूसीएफ के लिए नया हूँ ... myEntity एक सी # businessobject है ... क्या आप कृपया मुझे बता सकते हैं कि मैं इस प्रकार को कैसे और कहां DataContractSerializer को आपूर्ति करूं? –

उत्तर

12

से मैं क्या इकट्ठा होते हैं, आप एक WCF समारोह 'myEntity' नामक एक पैरामीटर है कि है। मुझे लगता है कि myEntity का प्रकार उपयोगकर्ता द्वारा परिभाषित वर्ग है और यह डेटाकंट्रैक्ट विशेषता के साथ सजाया गया है, जैसा कि यह होना चाहिए। मैं यह भी मान रहा हूं कि myEntity के प्रकार में एक सदस्य फ़ील्ड है जो एक स्ट्रिंग सरणी है। आइए मान लें कि यह सब सच है (फिर, यदि आप अपना कोड पोस्ट कर सकते हैं तो यह वास्तव में सहायक होगा)।

आमतौर पर, स्ट्रिंग सरणी, यानी, स्ट्रिंग [], ठीक से क्रमबद्ध होगा। लेकिन, कुछ मामलों में (here और here देखें), आपको डब्ल्यूसीएफ के लिए सही तरीके से क्रमबद्ध करने के क्रम में ज्ञात प्रकारों की सूची में जोड़ना पड़ सकता है।

ऐसा करने के लिए, निम्नलिखित जोड़ें:

[DataContract] 
[KnownType(typeof(string[]))] 
public class YourClassNameHere 
{ 
} 
+0

लक्ष्य मैट पर धमाका ... एक आकर्षण की तरह काम करता है! :-) आपके उत्तर के लिए धन्यवाद! –

+0

खुशी है कि यह आपके लिए काम करता है। –

+0

मुझे यह त्रुटि क्या है और मेरे पास कस्टम क्लास नहीं है? मैं बस एक पैरामीटर पास करना चाहता हूं जो एक स्ट्रिंग [] होता है। –

5

आप कोड पोस्ट नहीं किया है, तो मेरा उत्तर धारणा आप एक वर्ग myEntity जो आप को क्रमानुसार करने की कोशिश कर रहे है पर आधारित है। कक्षा

उदाहरण के लिए KnownTypeAttribute का उपयोग करने का प्रयास करें।

[KnownType(typeof(myEntity))] 

आप निम्न MSDN लिंक का उल्लेख कर सकते हैं: KnownTypeAttribute

+0

आपके उत्तर के लिए धन्यवाद .... लेकिन यह मेरे लिए काम नहीं किया –

+0

स्टीव, क्या आप कृपया अपने कोड का नमूना पोस्ट कर सकते हैं? –

0

हां। जैसा कि पिछली पोस्ट में बताया गया है, समस्या तब होती है जब आप किसी प्रकार की सरणी पास करते हैं (जिसे डेटाकंट्रैक्ट के रूप में परिभाषित किया जाता है])। आपको इस वर्ग की सरणी को एक अलग प्रकार के रूप में परिभाषित करने और डेटा अनुबंध के रूप में चिह्नित करने की आवश्यकता होगी।

अभ्यस्त Work`

[DataContract] 
Public class ABC{ 
} 

... 

SendData(ABC[]) 

`

क्या काम करेगा:

Public class Data{ public ABC[] prop{get;set;}} 
... 
SendData(Data); 
0

मेरे मामले में, MyEntity वर्ग के लिए [Serializable] विशेषता जोड़ने के बाद। और फिर यह मुद्दा भूमिका स्ट्रिंग सरणी के क्रमिकरण के साथ आया था।

[Serializable] 
    [KnownType(typeof(string[]))] 
    public class MyEntity 
    { 
     ......... 
     public string roles[] 
     ......... 
    } 

[ज्ञात टाइप (टाइपोफ (स्ट्रिंग []))] जादू की तरह काम किया!

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