2012-07-18 28 views
15

मैंने एक डब्ल्यूसीएफ सेवा के लिए एक सेवा संदर्भ जोड़ने की कोशिश की जो एक एएसपी.नेट एमवीसी 4 प्रोजेक्ट से उसी समाधान में रहता है लेकिन असफल रहा। मुझे यह कहते हुए एक त्रुटि मिली:सेवा संदर्भ जोड़ने में त्रुटि: प्रकार एक रिकर्सिव संग्रह डेटा अनुबंध है जो समर्थित नहीं है

Custom tool error: Failed to generate code for the service reference 'XXX'. Please check other error and warning messages for details. The root warning is:

Warning 9 Custom tool warning: Cannot import wsdl:portType Detail: An exception was thrown while running a WSDL import extension: System.ServiceModel.Description.DataContractSerializerMessageContractImporter Error: Type 'Newtonsoft.Json.Linq.JToken' is a recursive collection data contract which is not supported. Consider modifying the definition of collection 'Newtonsoft.Json.Linq.JToken' to remove references to itself. XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:portType[@name='IXXX'] C:\Projects...\Reference.svcmap 1 1 pqrt.web

यदि मैंने सेवा अनुबंध से डेटा अनुबंध हटा दिए हैं, तो यह काम करता है। मैंने लाइब्रेरी प्रोजेक्ट या यहां तक ​​कि एएसपी.नेट एमवीसी 3 प्रोजेक्ट जैसी अन्य परियोजनाओं के लिए सेवा संदर्भ जोड़ने की भी कोशिश की, यह सब काम किया। मैं सोच रहा था कि क्या यह एएसपी.नेट एमवीसी 4 के साथ एक मुद्दा था? मैं वीएस 2012 आरसी का उपयोग कर रहा था।

एक वर्कअराउंड मैं सोच सकता हूं कि लाइब्रेरी प्रोजेक्ट में सेवा संदर्भ जोड़ना है और फिर लाइब्रेरी प्रोजेक्ट को एएसपी.नेट एमवीसी 4 से कॉल करना है, लेकिन मुझे ऐसा करने से नफरत है क्योंकि यह एक अतिरिक्त कदम है। कोई सुझाव?

+0

मेरा जवाब पूरी तरह से बंद आधार हो सकता है ... आप अपने प्रश्न के साथ डेटा अनुबंध शामिल कर सकते हैं? –

उत्तर

0

क्या आप वाकई मनमाने ढंग से गहरे पेड़ में नोड वापस करने का मतलब रखते हैं?

यदि ऐसा है, तो JToken लौटने की बजाय, पहले इसे JSON टेक्स्ट प्राप्त करने के लिए इसे एक स्ट्रिंग में रूपांतरित करें। ग्राहक अंत में, आप Jtoken.Parse(yourstring) वापस जेटीकेन में कर सकते हैं।

यदि नहीं, तो Value<T> वापस गुजर और टी

10

साथ क्रमबद्धता सौदा दे अपने संदर्भ से Newtonsoft.Json निकालने का प्रयास करें और फिर से जोड़ आपकी सेवा संदर्भ पर विचार करें।

+4

मेरे लिए काम किया। पूर्व-निरीक्षण में, सेवा संदर्भ को कॉन्फ़िगर करने के लिए भी पर्याप्त हो सकता है कि "संदर्भित असेंबली में प्रकारों का पुन: उपयोग न करें" – TheXenocide

14

यदि आप न्यूटॉन्सॉफ्ट.जेसन के संदर्भ को रखना चाहते हैं तो आप डेटाकंट्रैक्ट्स का पुन: उपयोग करने के लिए असेंबली की सूची में से न्यूटॉन्सॉफ्ट.जेसन को भी छोड़ सकते हैं।

ऐसा करने के लिए: सही आपकी सेवा संदर्भ क्लिक करें, फिर विन्यस्त सेवा संदर्भ ...

"संदर्भित विधानसभाओं में पुन: उपयोग प्रकार" के अंतर्गत, जिसमें निर्दिष्ट करने के लिए दूसरा विकल्प चुनें पुन: उपयोग किया प्रकार के लिए खोज और चयन करने के लिए विधानसभाओं सभी असेंबली लेकिन न्यूटॉन्सॉफ्ट को अनचेक करें। जेसन

+1

यदि आपके पास सेवा संदर्भ के बिना डब्ल्यूसीएफ सेवा है तो क्या होगा? आप किस प्रकार का पुन: उपयोग करने के लिए कॉन्फ़िगर करेंगे? – user145400

1

मुझे JObject को एंडपॉइंट परिणाम के रूप में वापस करने का प्रयास करते समय संकलन समय पर यह त्रुटि थी।

मैं endpoint वापसी object बनाने और कोड इस तरह का होने से उसके चारों ओर हो गया है:

[WebGet(UriTemplate = "SomeRequest?form_request={form_request}", ResponseFormat = WebMessageFormat.Json)] 
public object SomeRequest(string form_request) 
{ 
    dynamic result = new JObject(); 
    // some other code 
    result.status = "success"; 
    return JsonConvert.SerializeObject(result); 
} 

jQuery लेने वाली सेवा के माध्यम से jsonp उदा $.getJSON('<?>.svc/SomeRequest', 'form_request=' + webform_as_json, request_callback); तो जैसे धारावाहिक वस्तु unpacks:

function request_callback(response) { 
    var json = $.parseJSON(response); 
    if (json.status == 'success') {