2009-10-27 13 views
6

के अंदर HttpContext एक्सेस करें मैं HTTP सेवा पर एक सादा xml बनाने के लिए WCF REST stater kit का उपयोग कर रहा हूं। प्रमाणीकरण करने के लिए एक अनुरोधइंटरसेप्टर का उपयोग करके इस आईएम के हिस्से के रूप में। RequestInterceptor के अंदर मेरे पास एक System.ServiceModel.Channels.RequestContext ऑब्जेक्ट तक पहुंच है जिससे मैं अनुरोध url, querystring पैरा और अन्य उपयोगी चीजें प्राप्त कर सकता हूं। मैं काम नहीं कर सकता कि अनुरोध के HttpContext तक पहुंच कैसे प्राप्त करें। मेरे पास HttpContext में कई चीजें संग्रहीत हैं जिन्हें मैं अनुरोध के अंदर प्रवेश करना चाहता हूं इंटरसेप्टर लेकिन मैं उन्हें पाने के लिए संघर्ष कर रहा हूं। जब मैं विजुअल स्टूडियो के अंदर क्विकवॉच का उपयोग करता हूं तो मैं देख सकता हूं कि अनुरोध के निजी सदस्यों के अंदर इसे दफनाया गया है। क्या कोई मुझे HttpContext तक पहुंचने का तरीका दिखा सकता है, शायद RequestContext ऑब्जेक्ट पर प्रतिबिंब का उपयोग कर?WCF RequestInterceptor

उत्तर

9

जब तक आप संगतता चालू करते हैं, तब तक आप ASP.NET में होस्ट की गई किसी भी डब्ल्यूसीएफ सेवा के अंदर एएसपी.NET के HttpContext तक पहुंच सकते हैं। यह दो चरणों में किया जाता है:

  1. आवश्यक
  2. के लिए आपकी सेवा वर्ग के लिए AspNetCompatibilityRequirementsAttribute लागू करें और RequirementsMode गुण सेट
  3. आप निम्नलिखित कॉन्फ़िगर करके अनुकूलता सक्षम सुनिश्चित करें:

    <system.serviceModel> 
        <serviceHostingEnvironment aspNetCompatibilityEnabled=”true” /> 
    </system.serviceModel> 
    

एक बार ऐसा करने के बाद, आप the static Current property का उपयोग कर किसी भी समय वर्तमान HttpContext इंस्टेंस का उपयोग कर सकते हैं। उदाहरण के लिए:

foreach(HttpCookie cookie in HttpContext.Current.Request.Cookies) 
{ 
    /* ... */ 
} 

ध्यान दें कि ASP.NET क्रम के साथ एकीकरण को सक्षम करने, प्रत्येक अनुरोध के लिए कुछ अतिरिक्त भूमि के ऊपर उठाना है, तो आप इसे सक्रिय करने के लिए नहीं है और बस का उपयोग करके कुछ प्रदर्शन को बचा सकता है अगर आप इसकी आवश्यकता नहीं है System.ServiceModel.Web रनटाइम इसके बजाए। आपके पास HttpRequestResponseMessageProperty और HttpResponseMessageProperty कक्षाओं का उपयोग करके आपको आवश्यक सारी जानकारी तक पहुंच है।

विषय पर अधिक जानकारी के लिए, this section of MSDN titled WCF and ASP.NET देखें।

+0

मेरे पास पहले से ऊपर बताई गई सभी चीजें हैं। मैं एक सामान्य ऑपरेशन कंट्रैक्ट विधि के अंदर HttpContext तक पहुंचने में सक्षम हूं लेकिन अनुरोध के अंदर इंटरसेप्टर (http://weblogs.asp.net/gsusx/archive/2008/11/26/extending-restful-services-with-a-custom-request -interceptor.aspx? CommentPosted = true # commentmessage) –