मैं एक वेब सेवा (ASP.NET MVC का उपयोग करके) लिख रहा हूं और समर्थन उद्देश्यों के लिए हम कच्चे, ऑन-द-वायर प्रारूप (यानी HTTP सहित) के रूप में संभव के रूप में अनुरोधों और प्रतिक्रिया को लॉग करने में सक्षम होना चाहते हैं एक डेटाबेस में विधि, पथ, सभी हेडर और बॉडी)।
मुझे यकीन नहीं है कि कम से कम 'मैंगल्ड' तरीके से इस डेटा को कैसे प्राप्त किया जाए। मैं पुनः विश्वास कर सकता हूं कि मेरा मानना है कि अनुरोध HttpRequestवस्तु के सभी गुणों का निरीक्षण करके और उनसे एक स्ट्रिंग का निर्माण करके (और इसी तरह प्रतिक्रिया के लिए) दिखता है, लेकिन मैं वास्तव में वास्तविक अनुरोध / प्रतिक्रिया डेटा को पकड़ना चाहता हूं। तार पर भेजा।
मैं किसी भी अवरोधन तंत्र जैसे कि फिल्टर, मॉड्यूल आदि का उपयोग करके खुश हूं और समाधान IIS7 के लिए विशिष्ट हो सकता है। हालाँकि, मैं इसे केवल प्रबंधित कोड में रखना पसंद करूँगा।
कोई सिफारिशें?
संपादित करें: मैंने नोट किया है कि HttpRequestएक ऐसा SaveAsतरीका है जो डिस्क को अनुरोध को बचा सकता है लेकिन यह आंतरिक सहायक विधियों के भार का उपयोग करके आंतरिक स्थिति से अनुरोध को फिर से संगठित करता है जिसे सार्वजनिक रूप से एक्सेस नहीं किया जा सकता है (काफी यही कारण है कि यह उपयोगकर्ता को प्रदान करने की अनुमति नहीं देता है धारा मुझे नहीं पता)। इसलिए ऐसा लगने लगा है कि मुझे वस्तुओं से अनुरोध / प्रतिक्रिया पाठ को फिर से संगठित करने के लिए अपनी पूरी कोशिश करनी होगी ... कराहना।
संपादित करें 2: कृपया ध्यान दें कि मैंने विधि, पथ, हेडर आदि सहित पूरे अनुरोध को कहा है । वर्तमान प्रतिक्रियाएं केवल उन बॉडी स्ट्रीम को देखती हैं जिनमें यह जानकारी शामिल नहीं है।
संपादित करें 3: क्या कोई भी इधर-उधर के सवालों को नहीं पढ़ता है? पांच जवाब अब तक और पूरे कच्चे ऑन द वायर अनुरोध को प्राप्त करने के लिए एक तरह से संकेत भी नहीं है। हां, मुझे पता है कि मैं आउटपुट स्ट्रीम और हेडर और URL और उस सभी सामान को अनुरोध ऑब्जेक्ट से कैप्चर कर सकता हूं। मैंने पहले ही कहा था कि प्रश्न में देखें:
मैं पुनः विश्वास कर सकता हूं कि मेरा मानना है कि अनुरोध HttpRequest ऑब्जेक्ट की सभी संपत्तियों का निरीक्षण करके और उनसे एक स्ट्रिंग का निर्माण (और इसी तरह प्रतिक्रिया के लिए) करता है, लेकिन मैं वास्तव में वास्तविक अनुरोध / प्रतिक्रिया डेटा प्राप्त करना चाहता हूं यह तार पर भेजा गया है।
यदि आप पूरा कच्चा डेटा (हेडर, यूआरएल, http विधि, आदि सहित) जानते हैं, तो इसे पुनः प्राप्त नहीं किया जा सकता है, तो यह जानना उपयोगी होगा। इसी तरह यदि आप जानते हैं कि इसे कच्चे प्रारूप में कैसे प्राप्त किया जा सकता है (हां, मेरा अब भी मतलब है जिसमें हेडर, यूआरएल, http विधि, आदि शामिल हैं) इसे फिर से बनाए बिना, जो मैंने पूछा है, तो वह बहुत उपयोगी होगा। लेकिन मुझे यह बताना कि मैं इसे HttpRequest/ HttpResponseऑब्जेक्ट्स से फिर से बना सकता हूं उपयोगी नहीं है। मुझे पता है। मैंने पहले ही कहा था।
कृपया ध्यान दें: इससे पहले कि कोई भी यह कहना शुरू कर दे कि यह एक बुरा विचार है, या स्केलेबिलिटी को सीमित कर देगा, आदि, हम वितरित वातावरण में थ्रॉटलिंग, अनुक्रमिक वितरण और एंटी-रीप्ले मैकेनिज्म को भी लागू करेंगे, इसलिए डेटाबेस लॉगिंग वैसे भी आवश्यक है। मैं इस बारे में चर्चा नहीं कर रहा हूं कि क्या यह एक अच्छा विचार है, मैं यह देख रहा हूं कि यह कैसे किया जा सकता है।
