मुझे विकसित एएसएमएक्स वेब सेवा के लिए प्राधिकरण त्रुटि का सामना करना पड़ रहा है। वेब सेवा को किसी भी उपयोगकर्ता क्रेडेंशियल्स की आवश्यकता नहीं होती है, लेकिन ऐसा लगता है कि वेब सेवा को लागू करने के लिए कॉन्फ़िगर किया गया है, हालांकि मैंने कॉन्फ़िगरेशन सेट करने की कोशिश की है जैसे अज्ञात पहुंच की अनुमति:एएसएमएक्स वेब सेवा अज्ञात पहुंच की अनुमति देने के लिए
मैंने इसी वेबसाइट को सेट किया है IIS में अनाम पहुँच के लिए अनुमति देने के लिए:
इसके अलावा 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>
कुछ चीजें ... क्या आप क्लाइंट-साइड सेवा कॉन्फ़िगरेशन से संबंधित परीक्षण क्लाइंट से web.config अनुभाग पोस्ट कर सकते हैं? साथ ही, क्या आपने सेवा पक्ष पर विधि को स्थैतिक बनाने की कोशिश की है? मैं कुछ अन्य संदर्भों (जैसे कि नियमित एएसपीएक्स पेज) में जानता हूं, वेबमाइड्स को स्थैतिक होना आवश्यक है, लेकिन मुझे एएसएमएक्स के लिए याद नहीं है। – Andrew
@ एंड्रयू: आपकी टिप्पणी के लिए धन्यवाद। मैंने अपने सवालों के कुछ और विवरण जोड़े हैं। मैंने वेब ब्राउजर के माध्यम से एक्सेस करने का भी प्रयास किया, इसलिए app.config बहुत प्रासंगिक नहीं हो सकता है। मैंने अभी भी इसे संदर्भ के लिए जोड़ा है। आप कभी नहीं जानते ... – chiccodoro
क्या उपयोगकर्ता जो आप अज्ञात पहुंच के लिए उपयोग कर रहे हैं, उसके पास आपके फ़ोल्डर पर अधिकार पढ़ने हैं? –