में जेसन प्रतिक्रिया सामग्री प्रकार को गतिशील रूप से असाइन करना मैं एक पीओसी एप्लीकेशन लिख रहा हूं जो Microsoft.ServiceBus.dll 1.0.0.0 (.NET 3.5 संस्करण) का उपयोग करता है।डब्ल्यूसीएफ एज़ूर सर्विस बस
मेरे WCF अनुबंध और निम्नलिखित की तरह सेवा नज़र:
- SECURITYMODE:: परिवहन
- TransferMode: स्ट्रीम किया
[ServiceContract(Name="MyServiceContract", Namespace = "http://mydomain.com/")]
internal interface IServiceContract
{
[WebInvoke(Method = "POST", UriTemplate = "/DoOperation")]
[OperationContract]
Stream RelayRequest(Stream requestBody);
}
[ServiceBehavior(Name = "Service1", Namespace = "http://mydomain.com/Service1/", InstanceContextMode = InstanceContextMode.Single)]
internal class Service1 : IServiceContract
{
Stream RelayRequest(Stream requestBody)
{
var contents = GetJsonResponse();
var responseStream = new MemoryStream();
var streamWriter = new StreamWriter(responseStream);
streamWriter.AutoFlush = true;
var writer = new JsonTextWriter(streamWriter);
var serializer = new JsonSerializer();
serializer.Serialize(responseStream, contents);
responseStream.Position = 0 // reset the position of the stream so that it's contents will be read from the beginning.
//Problem Line:
WebOperationContext.OutgoingResponse.ContentType = "application/json";
return responseStream;
}
}
सुनने के अंत बिंदु WebHttpRelayBinding उपयोग करने के लिए कॉन्फ़िगर किया गया है
जब मैं असाइन करने का प्रयास करता हूं "एप्लिकेशन/जेसन" के आउटगोइंग प्रतिक्रिया का ContentType कोई त्रुटि नहीं होती है लेकिन कॉलिंग अनुरोध स्थिति कोड 504 (गेटवे टाइमआउट) के साथ आता है।
यदि मैं सामग्री प्रकार को "टेक्स्ट/जावास्क्रिप्ट" में बदलता हूं तो कॉलिंग अनुरोध 200 (ठीक) के साथ आता है।
कुछ बातें ध्यान रखें:
- सामग्री प्रकार रन समय तक ज्ञात नहीं है तो यह गतिशील रूप से आवंटित किया जाना चाहिए।
- स्ट्रीम की सामग्री शुद्ध है - 100% मान्य - जेसन।
- स्ट्रीम स्वीकार करने और वापस करने का इरादा इसलिए है कि हम स्ट्रीम किए गए अनुरोध स्वीकार कर सकते हैं और डेटा को क्लाइंट को स्ट्रीम कर सकते हैं।
- प्रत्येक अनुरोध/प्रतिक्रिया में एक छोटा जेसन पेलोड या 200 एमबी दस्तावेज़ हो सकता है।
- यदि आप repro करना चाहते हैं - यह कोड serialization के लिए न्यूटॉन्सॉफ्ट जेसन लाइब्रेरी का उपयोग करता है।
यह क्यों हो रहा है और मैं इसे कैसे ठीक कर सकता हूं?
संपादित करें: 504 स्टेटस कोड फिडलर द्वारा अनुमानित लाल हेरिंग हो सकता है जिसके साथ मैं परीक्षण कर रहा हूं। System.Net.Http.HttpClient से एक ही अनुरोध भेजना इंगित करता है कि प्रतिक्रिया प्राप्त होने से पहले कनेक्शन बंद हो जाता है।
संपादित करें: सामग्री-प्रकार को बहुत कुछ और (गैर-संवेदी मानों सहित) में सेट करना ठीक काम करता है। एकमात्र सामग्री प्रकार जिसे मैं इसे तोड़ने के लिए प्राप्त कर सकता हूं वह एप्लिकेशन/जेसन
आप अपने config फ़ाइल से जानकारी जोड़ सकते हैं/कैसे आप इस सेवा को आरंभ? आप किस प्रकार के बाध्यकारी का उपयोग कर रहे हैं? – TheDude
ऊपर बताए गए अनुसार हम WebHttpRelay बाइंडिंग का उपयोग करते हैं। यह बाध्यकारी/अंत बिंदु कॉन्फ़िगर द्वारा नहीं बनाया गया है, यह रनटाइम पर प्रोग्रामेटिक रूप से बनाया गया है। –
आह, अनुमान है कि आपके पास मानसिक विवरणों की एक श्रृंखला थी जो आपके विवरण को पढ़ रही है ... – TheDude