2015-09-15 3 views
10

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

मुझे लगता है कि यह सही है, अगर मुझे पता नहीं है, तो मेरी समस्या यह है कि जब मैं HttpResponseMessage.Content सेट करने का प्रयास करता हूं तो मेरी समस्या होती है। जब मैं ऐसा करता हूं, क्लाइंट जिसमें मैंने रीस्टफुल कॉल अनुरोध प्रमाणीकरण किया था।

इंटरफ़ेस में:

[WebGet(UriTemplate = "/GetDetailsForName?name={name}" 
        , ResponseFormat = WebMessageFormat.Json)] 
HttpResponseMessage GetDetailsForName(string name); 

वर्ग में:

यहाँ मेरी कोड है

public HttpResponseMessage GetDetailsForName(string name) 
{ 
    HttpResponseMessage hrm = new HttpResponseMessage(HttpStatusCode.OK) 
     { 
     //If I leave this line out, I get the response, albeit empty 
     Content = new StringContent("Hi") 
     }; 

    return hrm; 
} 

मैं Request.CreateResponse इस्तेमाल करने की कोशिश करना चाहता था लेकिन मैं नहीं कर पा रहे मेरे डब्ल्यूसीएफ आराम विधि से अनुरोध करने के लिए। OperationContext.Current.RequestContext में CreateResponse नहीं है।

कोई बात नहीं?

+0

जब आप सामग्री में "हाय" डालते हैं, तो ग्राहक के साथ क्या होता है? –

+0

यह ब्राउज़र क्रेडेंशियल विंडो को फेंकता है, भले ही मैं क्रेडेंशियल डालता हूं, मुझे अभी अनधिकृतता मिलती है। – Matt

+0

क्या आपने जांच की है कि "हाय" के साथ और बिना प्रतिक्रिया के मीडिया प्रकार क्या हैं? –

उत्तर

1

दुर्भाग्य से यह काम नहीं करेगा। प्रदर्शित कोड कहता है:

HttpResponseMessage ऑब्जेक्ट का निर्माण, इसे JSON serializer के साथ क्रमबद्ध करें और परिणाम को तार पर पास करें।

समस्या जबकि StringContent बिल्कुल धारावाहिक नहीं किया जा सकता, HttpResponseMessage डिस्पोजेबल और नहीं धारावाहिक होना चाहिए है।

कारण है कि आप एक प्रमाणीकरण प्रपत्र पर पुनः निर्देशित कर रहे हैं के रूप में - सेवा जब यह StringContent को क्रमानुसार नहीं कर सकते हैं और एक 400 HTTP स्थिति कोड जो एक प्रमाणीकरण मुद्दे के रूप में व्याख्या हो जाता है देता है एक अपवाद फेंकता है।

+0

क्या आपके पास 'HttpResponseMessage के लिए एक दस्तावेज़/संदर्भ है जो डिस्पोजेबल है और धारावाहिक होने के लिए नहीं है'। और क्यों नहीं 'स्ट्रिंगकंटेंट' को क्रमबद्ध किया जा सकता है? – ANewGuyInTown

+0

यह उत्तर प्रश्न में विशिष्ट स्थिति के आंतरिक कार्यों को बताता है।अन्य परिदृश्यों में, आप लगभग हर तरह से किसी अन्य तरीके से क्रमबद्ध करने में सक्षम हो सकते हैं। यदि आपको इसकी ज़रूरत है, तो बस अपने विनिर्देशों के साथ एक नया प्रश्न पूछें। –

+0

नहीं, मैं समझने की कोशिश कर रहा था कि आपने अपने उत्तर में क्या उद्धृत किया है और आपने जो कहा है उस पर सवाल पूछे। आप सही हैं कि यदि आप चाहते हैं कि कुछ भी क्रमबद्ध किया जा सकता है, हालांकि, ढांचे द्वारा क्रमबद्धरण के प्रदान किए गए या डिफ़ॉल्ट तरीके से _serialize_ से इनकार कर सकते हैं कि आप किस 'स्वरूपक' का उपयोग कर रहे हैं और _class/Properties_ में 'विशेषताएँ' मौजूद हैं । – ANewGuyInTown

0

अगर मैं बोल रहा हूँ, उदाहरण के लिए एक सार्वजनिक स्ट्रिंग getDetails (पूर्णांक आईडी) और एक त्रुटि फेंक दिया जाता है, इस काम करता है ...

catch(Exception ex) 
{ 
OutgoingWebResponseContext response = WebOperationContext.Current.OutgoingResponse; 
response.StatusCode = System.Net.HttpStatusCode.OK; //this returns whatever Status Code you want to set here 
response.StatusDescription = ex.Message.ToString(); //this can be accessed in the client 
return "returnValue:-998,message:\"Database error retrieving customer details\""; //this is returned in the body and can be read from the stream 
} 
संबंधित मुद्दे