2012-12-22 17 views
6

के साथ डेटा सेवा में HttpContext बनाम ऑपरेशन कॉन्टेक्स्ट। मेरे पास एक डब्ल्यूसीएफ डेटा सेवा (v5.2) है जो OnStartProcessingRequest(ProcessRequestArgs args) ओवरराइड करता है। मैं प्रतिक्रिया में कुछ शीर्षलेख जोड़ना चाहता हूं (इस विधि में मुझे लगता है कि सही जगह है?)। मैंने पहली बार यह कोशिश की:HTTP हेडर

args.OperationContext.ResponseHeaders.Add(...) 

यह काम नहीं किया। मैं तो कोशिश की इस:

OperationContext.Current.OutgoingMessageHeaders.Add(...) 

कि काम नहीं किया। मैंने उस चूसने वाले पर एक नया ऑपरेशन कॉन्टेक्स्टस्कोप जोड़ने की कोशिश की। यह अभी भी असफल रहा। अंत में मैंने यह कोशिश की:

HttpContext.Current.Response.AddHeader(...); 

वह विकल्प काम करता है! ("काम" से मेरा मतलब है कि यह वास्तव में ग्राहक के जवाब में दिखाई देता है।) पहले दो विकल्प क्यों काम नहीं करते थे?

वेब पर आगे पढ़ने के बाद मुझे पता चला कि

WebOperationContext.Current.OutgoingResponse.Headers.Add(...) 

भी काम करता है। पृथ्वी पर क्यों हमारे पास इस विधि के अंदर चार वर्तमान संदर्भ हैं? एक व्यक्ति को यह जानने के लिए कि किसको उपयोग करना है (रनटाइम पर)? मेरे [WebGet] विधियों में कौन से मान्य हैं? मेरे [QueryInterceptor] विधियों में कौन से मान्य हैं? सही अनुरोध शीर्षलेख रखने के लिए किस संदर्भ की गारंटी है? (मैं वर्तमान में args.OperationContext का उपयोग कर रहा हूं।)

उत्तर

8

ProcessRequestArgs.OperationContext.ResponseHeaders के बारे में नहीं पता, लेकिन मुझे लगता है कि मैं समझा सकता हूं कि ऑपरेशनकॉन्टेक्स्ट.कुरेंट.ऑटगोइंग मैसेज हेडर काम क्यों नहीं करते: "हेडर" एसओएपी हेडर हैं (संभवतः गैर-एसओएपी सेवाओं के लिए अनदेखा), HTTP शीर्षलेख नहीं। अन्य दो मामलों में (HttpContext.Current.Response.AddHeader औरWebOperationContext.Current.OutgoingResponse.Headers) नामों में "एचटीपी" और "वेब" को इंगित करने के लिए नोटिस करें कि आप कुछ HTTP-विशिष्ट कर रहे हैं, यानी HTTP शीर्षलेख जोड़ना।

वैसे:

  • OperationContext - नियमित रूप से WCF आपरेशन संदर्भ
  • WebOperationContext - WCF आपरेशन संदर्भ
  • HttpContext के लिए बाकी/HTTP एक्सटेंशन - ASP.NET होस्टिंग मॉडल के साथ संगतता, केवल काम करता है जब का उपयोग कर एएसपी.नेट कंपैट मोड (जब स्वयं होस्टेड नहीं है, आदि), http://blogs.msdn.com/b/wenlong/archive/2006/01/23/516041.aspx
देखें
संबंधित मुद्दे