2009-06-01 14 views
6

हमारे पास एक .net एएसएमएक्स वेब सेवा है जिसे जावास्क्रिप्ट से कॉल किया जाता है (एएसपी.NET AJAX का उपयोग करके), और सत्र तक पहुंच की आवश्यकता होती है।वेब सेवा कॉल में सत्र तक केवल पढ़ने के लिए?

[WebMethod(true)] 
public string DoSomethingOnTheServer() { } 

हम पढ़ने/लिखने के अनुरोध पर लॉक होने की समस्या में भाग ले रहे हैं। क्या वेब सेवा विधि को चिह्नित करने का कोई तरीका है क्योंकि सत्र में केवल पढ़ने के लिए उपयोग की आवश्यकता है?

धन्यवाद!

उत्तर

0

WebMethod विशेषता के MSDN documentation के अनुसार कई संभावित गुण हैं, इसलिए मुझे यकीन नहीं है कि आपके WebMethod विशेषता में 'सत्य' मूल्य क्या होगा।

आप की कोशिश की है:

[WebMethod(EnableSession=true)] 

this document कि आप सत्र के लिए पूर्ण पहुँच देना चाहिए के अनुसार।

+0

पढ़ लिया है और ब्लॉक नहीं समस्या यह है कि विधि दोनों पढ़ने और लिखने की अनुमति देता है ... मैं एक तरह से तलाश कर रहा हूँ केवल पढ़ने की पहुंच को चालू करने के लिए (जब आप एकाधिक एक साथ अनुरोध करते हैं तो लिखने के उपयोग को अवरुद्ध करना बंद कर देता है)। हालांकि, मुझे विश्वास नहीं है कि एक रास्ता है। – Jonas

+2

आह हे, अब मैं देखता हूं ... अब जब मैंने थोड़ा और खोज किया है तो यह बहुत समझ में नहीं आता है कि आप केवल एक पृष्ठ को पढ़ने के लिए एक पृष्ठ सेट कर सकते हैं, लेकिन वेब सेवा नहीं। यदि आप WebMethods को एएसपीएक्स पेज (वेबमाइड्स के रूप में उजागर करते हैं) में रखते हैं और पृष्ठ की EnableSessionState प्रॉपर्टी को केवल पढ़ने के लिए सेट करते हैं? यह सबसे अच्छा समाधान नहीं है, लेकिन यह काम कर सकता है। – PhillFox

4

यह http://msdn.microsoft.com/en-us/library/aa480509.aspx पृष्ठ यह सुझाव देता है कि उत्तर "नहीं" है - आप WebSerivce को EnableSessionState=ReadOnly के रूप में चिह्नित नहीं कर सकते हैं।

यदि आप एक ही प्रक्रिया से एक साथ वेब सेवा कॉल कर रहे हैं, तो अनुरोध सर्वर पर क्रमबद्ध किए जाएंगे ताकि केवल एक ही समय में निष्पादित हो सके। एएसपीएक्स पृष्ठों के विपरीत जो HttpSessionState ऑब्जेक्ट को केवल पढ़ने के लिए उपयोग के लिए समर्थन करते हैं, जो एकाधिक अनुरोधों के साथ-साथ प्रोसेसिंग की अनुमति देता है, एएसपी.नेट वेब सेवाओं के साथ ऐसी कोई क्षमता नहीं है। सत्र सक्षम सक्षम सभी वेब विधि कॉल पढ़ने/लिखने के लिए है और प्रत्येक सत्र के भीतर serialized किया जाएगा।

चेतावनी: वह लेख पुराना है (2002)।

+0

पुराना है, लेकिन अभी भी लागू होता है :( – quetzalcoatl

1

यह वास्तव में पुराना धागा है, लेकिन मैंने उसी प्रश्न के उत्तर के लिए अपनी खोज में इसे ठोकर दिया।

मैं और जहां जवाब मिल गया है, और यह यहाँ मेरे घर में अन्य इन्टरनेट के लिए छोड़ देंगे:

Global.asax में आप प्रत्येक अनुरोध के लिए निर्दिष्ट कर सकते हैं, कौन-सी का उपयोग अनुरोध सत्र वस्तु के लिए होनी चाहिए और इस प्रकार अगर इसे अवरुद्ध करना चाहिए या नहीं।

private void Application_BeginRequest(object sender, EventArgs e) 
{ 
    // This will set the session to read only for asmx services 
    // This will make the asmx services non blocking for other requests as it doesnt lock the session object 
    if (Context.Request.Path.Contains(".asmx/")) 
    { 
     Context.SetSessionStateBehavior(SessionStateBehavior.ReadOnly); 
    } 
} 

इस तरह ASMX सेवाएं हमेशा ही केवल सत्र के लिए उपयोग अन्य अनुरोध

संबंधित मुद्दे