2011-01-24 13 views
6

मुझे विकसित एएसएमएक्स वेब सेवा के लिए प्राधिकरण त्रुटि का सामना करना पड़ रहा है। वेब सेवा को किसी भी उपयोगकर्ता क्रेडेंशियल्स की आवश्यकता नहीं होती है, लेकिन ऐसा लगता है कि वेब सेवा को लागू करने के लिए कॉन्फ़िगर किया गया है, हालांकि मैंने कॉन्फ़िगरेशन सेट करने की कोशिश की है जैसे अज्ञात पहुंच की अनुमति:एएसएमएक्स वेब सेवा अज्ञात पहुंच की अनुमति देने के लिए

मैंने इसी वेबसाइट को सेट किया है IIS में अनाम पहुँच के लिए अनुमति देने के लिए:

Screenshot of IIS setting

इसके अलावा web.config में निम्नलिखित लाइनों मैं शामिल किया है:

<configuration> 
    ... 
    <system.web> 
     ... 
     <authorization> 
      <allow users="*"/> 
     </authorization> 
     ... 
    </system.web> 
    ... 
</configuration> 

कॉल करने के लिए कोशिश कर रहा है जब एक परीक्षण ग्राहक से वेब सेवा, मैं इस त्रुटि संदेश मिलता है:

HTTP अनुरोध ग्राहक प्रमाणीकरण योजना 'बेनामी' के साथ अनधिकृत है। सर्वर से प्राप्त प्रमाणीकरण हेडर 'NTLM' था।

वेब सेवा को फोन कोड की पंक्ति इस तरह दिखता है:

string message = new ServiceReference1.Service1SoapClient().HelloWorld(); 

और वेब सेवा का कोड:

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.ComponentModel.ToolboxItem(false)] 
public class Service1 : System.Web.Services.WebService 
{ 
    [WebMethod] 
    public string HelloWorld() 
    { 
     return "Hello World"; 
    } 
} 

कुछ महत्वपूर्ण बिंदुओं:

  • यदि मैं NTLM का उपयोग करके प्रमाणीकृत करने के लिए क्लाइंट को आज़माकर सेट करता हूं, तो यह ठीक काम करता है।
  • यदि मैं क्लाइंट को प्रमाणीकृत न करने का प्रयास करता हूं और सेट करता हूं, तो यह ऊपर दिए गए संदेश से विफल रहता है।
  • यदि मैं किसी वेब ब्राउज़र का उपयोग करके वेब सेवा को आजमाकर एक्सेस करता हूं, तो मुझे अपेक्षित वेब सेवा प्रलेखन पृष्ठ के बजाय एक FORBIDDEN त्रुटि संदेश भी मिलता है।
  • यदि मैं विजुअल स्टूडियो के भीतर से वेब सेवा चलाता हूं और क्लाइंट को उस सेवा (लोकलहोस्ट ...) तक पहुंचने के लिए कॉन्फ़िगर करता हूं, तो यह ठीक काम करता है।
  • में और अधिक विवरण

मैं भी करने की कोशिश की के लिए नीचे देखें और वेब सेवा को इंगित करने वाले स्थान टैग के भीतर प्राधिकरण टैग डाल:

<location path="Service1.asmx"> 
    <system.web> 
     <authorization> 
      <allow users="*" /> 
     </authorization> 
    </system.web> 
</location> 

इस तरह ग्राहक कॉन्फ़िगरेशन (app.config) जैसा दिखता है (कृपया ध्यान दें कि जैसा ऊपर बताया गया है, मैं वेब ब्राउजर का उपयोग करके सेवा तक भी नहीं पहुंच सकता, इसलिए मैं क्लाइंट कॉन्फ़िगरेशन को प्रासंगिक नहीं मानता):

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.serviceModel> 
     <bindings> 
      <basicHttpBinding> 
       <binding name="Service1Soap" closeTimeout="00:01:00" openTimeout="00:01:00" 
        receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" 
        bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
        maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
        messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
        useDefaultWebProxy="true"> 
        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
         maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
        <security mode="None"> 
         <transport clientCredentialType="None" proxyCredentialType="None" 
          realm="" /> 
         <message clientCredentialType="UserName" algorithmSuite="Default" /> 
        </security> 
       </binding> 
      </basicHttpBinding> 
     </bindings> 
     <client> 
      <endpoint address="http://name.of.the.server.example.org/Service1.asmx" 
       binding="basicHttpBinding" bindingConfiguration="Service1Soap" 
       contract="ServiceReference1.Service1Soap" name="Service1Soap" /> 
     </client> 
    </system.serviceModel> 
</configuration> 

कोई विचार?


अद्यतन: मैं निम्न फ़ाइल पाया:

C:\WINNT\Microsoft.NET\Framework\v2.0.50727\ASP.NETWebAdminFiles\web.config 

यह एक कस्टम वेब आवेदन करने के लिए किसी भी प्रासंगिकता है, और अगर हां, मेरे अपने web.config की सेटिंग ओवरराइड नहीं करते उस फाइल की सेटिंग्स? उस फ़ाइल की

सामग्री: अन्य फ़ाइल है

<configuration> 
    <system.web> 
     <membership> 
      <providers> 
       <add name="WebAdminMembershipProvider" type="System.Web.Administration.WebAdminMembershipProvider" /> 
      </providers> 
     </membership> 
     <httpModules> 
      <add name="WebAdminModule" type="System.Web.Administration.WebAdminModule"/> 
     </httpModules> 
     <authentication mode="Windows"/> 
     <authorization> 
      <deny users="?"/> 
     </authorization> 
     <identity impersonate="true"/> 
     <trust level="Full"/> 
     <pages validateRequest="true"/> 
     <globalization uiCulture="auto:en-US" /> 
    </system.web> 
</configuration> 

हालांकि:

C:\WINNT\Microsoft.NET\Framework\v2.0.50727\config\web.config 

और मुझे लगता है कि नहीं बल्कि यह एक सिस्टम-वाइड web.config फ़ाइल है।

<system.web> 
    <authorization> 
     <allow users="*"/> 
    </authorization> 
+0

कुछ चीजें ... क्या आप क्लाइंट-साइड सेवा कॉन्फ़िगरेशन से संबंधित परीक्षण क्लाइंट से web.config अनुभाग पोस्ट कर सकते हैं? साथ ही, क्या आपने सेवा पक्ष पर विधि को स्थैतिक बनाने की कोशिश की है? मैं कुछ अन्य संदर्भों (जैसे कि नियमित एएसपीएक्स पेज) में जानता हूं, वेबमाइड्स को स्थैतिक होना आवश्यक है, लेकिन मुझे एएसएमएक्स के लिए याद नहीं है। – Andrew

+0

@ एंड्रयू: आपकी टिप्पणी के लिए धन्यवाद। मैंने अपने सवालों के कुछ और विवरण जोड़े हैं। मैंने वेब ब्राउजर के माध्यम से एक्सेस करने का भी प्रयास किया, इसलिए app.config बहुत प्रासंगिक नहीं हो सकता है। मैंने अभी भी इसे संदर्भ के लिए जोड़ा है। आप कभी नहीं जानते ... – chiccodoro

+0

क्या उपयोगकर्ता जो आप अज्ञात पहुंच के लिए उपयोग कर रहे हैं, उसके पास आपके फ़ोल्डर पर अधिकार पढ़ने हैं? –

उत्तर

0

अज्ञात पहुंच के लिए उपयोग किए जाने वाले इंटरनेट अतिथि खाते में एक समस्या प्रतीत होती है। अगर मैं उस खाते को अलग-अलग सेट करता हूं, तो यह ठीक काम करता है।

0

हाँ, सर्वर आपकी साइट के लिए अनाम पहुँच देने के लिए कॉन्फ़िगर करने की आवश्यकता है: वास्तव में इस फ़ाइल में सभी उपयोगकर्ताओं के लिए उपयोग की अनुमति देता।
<allow users="*" /> आपको केवल इतना करना है (.NET भाग से)।

+0

अब मैंने अज्ञात पहुंच को आजमाया और सेट किया है (ऊपर अपडेट देखें)। यह अभी भी काम नहीं करता है। – chiccodoro

+0

हाय स्वीको, क्या आप मेरे (अपडेट किए गए) प्रश्न पर एक और नजर डालना चाहते हैं? मैं वास्तव में खो गया महसूस करता हूं ... – chiccodoro

0

नेट से आपको सभी उपयोगकर्ताओं को पहले से ही अनुमति देनी होगी। अज्ञात पहुंच की अनुमति देने के लिए आपके पास आईआईएस कॉन्फ़िगर होना चाहिए। आप शेष पृष्ठों के साथ प्रमाणित कैसे करते हैं?

+0

अब मैंने अज्ञात पहुंच को आजमाया और सेट किया है (ऊपर अपडेट देखें)। यह अभी भी काम नहीं करता है। – chiccodoro

+0

हाय स्मेल्च, क्या आपके पास मेरे (अपडेट किए गए) प्रश्न को फिर से पढ़ने के बाद कोई और विचार है? – chiccodoro

1

क्या आपने उच्च स्तर के web.config और/या machine.config की जांच की है जो आपके ऐप में कॉन्फ़िगरेशन सेटिंग्स का योगदान दे रहे हैं?

+0

मुझे कुछ दिलचस्प मिला, हालांकि मुझे यकीन नहीं है कि यह कितना प्रासंगिक है। अद्यतन प्रश्न देखें। – chiccodoro

6

* प्रमाणीकृत उपयोगकर्ताओं का मतलब है, आपको इसके बजाय ? का उपयोग करने की आवश्यकता है।

पूरे वेब साइट के लिए प्रमाणीकरण अक्षम करके देखें:

<system.web> 
    <authentication mode="None" /> 
    <authorization> 
    <allow users="?" /> 
    </authorization> 
</system.web> 

इस जाँच करें: test.txt फ़ाइल बनाने और वेब ब्राउज़र से यह तक पहुँचने का प्रयास। क्या आपको 'एक्सेस अस्वीकृत' त्रुटि मिलती है?

अगला, गैर-मौजूदा एएसपीएक्स पेज खोलने का प्रयास करें, उदा। blah.aspx। आपको 404 त्रुटि मिलनी चाहिए, एक्सेस अस्वीकृत नहीं है।

+0

दुर्भाग्यवश यह कुछ भी नहीं बदला।हालांकि मुझे पता चला कि यह अज्ञात पहुंच के लिए कॉन्फ़िगर किए गए खाते में एक समस्या थी। – chiccodoro

+0

या उस सेवा वाले फ़ोल्डर में web.config चिपकाएं जो प्राधिकरण सेटिंग को ओवरराइट करेगा – CRice

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