यह एक प्रश्न नहीं है - इसे संदर्भ के लिए यहां पोस्ट किया जा रहा है:
WebService का उपभोग करते समय, मुझे निम्नलिखित त्रुटि मिली:
अनुरोध प्रारूप अप्रत्याशित रूप से / myMethodName URL को समाप्त करने के लिए पहचाना नहीं गया है
यह एक प्रश्न नहीं है - इसे संदर्भ के लिए यहां पोस्ट किया जा रहा है:
WebService का उपभोग करते समय, मुझे निम्नलिखित त्रुटि मिली:
अनुरोध प्रारूप अप्रत्याशित रूप से / myMethodName URL को समाप्त करने के लिए पहचाना नहीं गया है
जवाबों:
इस वेबसाइट पर एक समाधान मिला
आपको बस अपने web.config में निम्नलिखित जोड़ना है
<configuration>
<system.web>
<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
</protocols>
</webServices>
</system.web>
</configuration>
Microsoft से अधिक जानकारी
मेरे द्वारा पाई गई सभी जानकारी के 90% होने के बावजूद (इस त्रुटि का समाधान खोजने की कोशिश करते हुए) मुझे HttpGet
और HttpPost
कॉन्फ़िगरेशन को जोड़ने के लिए कहा, यह मेरे लिए काम नहीं किया ... और वैसे भी मेरे लिए कोई मतलब नहीं था।
मेरा एप्लिकेशन बहुत सारे सर्वर (30+) पर चल रहा है और मुझे उनमें से किसी के लिए भी इस कॉन्फ़िगरेशन को कभी नहीं जोड़ना है। या तो .NET 2.0 या .NET 4.0 के तहत चलने वाले एप्लिकेशन का संस्करण।
मेरे लिए समाधान IIS के खिलाफ ASP.NET को फिर से पंजीकृत करना था।
मैंने इसे प्राप्त करने के लिए निम्न कमांड लाइन का उपयोग किया है ...
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i
aspnet_regiis -i
हालांकि यह तय है।
सुनिश्चित करें कि आप सही विधि का उपयोग कर रहे हैं: पोस्ट / प्राप्त करें, सही सामग्री प्रकार और सही पैरामीटर (डेटा)।
$.ajax({
type: "POST",
url: "/ajax.asmx/GetNews",
data: "{Lang:'tr'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) { generateNews(msg); }
})
content-type: application/json
भी मेरे लिए इस समस्या का समाधान।
उत्तम।
केस 2 - जहां मेरे मामले में वही समस्या उत्पन्न हो सकती है) निम्नलिखित लाइन के कारण समस्या थी:
<webServices>
<protocols>
<remove name="Documentation"/>
</protocols>
</webServices>
यह सर्वर में अच्छी तरह से काम करता है क्योंकि कॉल सीधे webservice फ़ंक्शन पर किए जाते हैं - हालाँकि, यदि आप डिबग वातावरण में .Net पर सीधे सेवा चलाते हैं और फंक्शन को मैन्युअल रूप से चलाना चाहते हैं तो यह विफल हो जाएगा।
रिकॉर्ड के लिए मुझे यह त्रुटि मिल रही थी जब मैंने एक पुराने ऐप को एक सर्वर से दूसरे सर्वर पर स्थानांतरित कर दिया। मैंने जोड़ा<add name="HttpGet"/> <add name="HttpPost"/>
web.config में तत्वों को , जिन्होंने इस त्रुटि को बदल दिया है:
System.IndexOutOfRangeException: Index was outside the bounds of the array.
at BitMeter2.DataBuffer.incrementCurrent(Int64 val)
at BitMeter2.DataBuffer.WindOn(Int64 count, Int64 amount)
at BitMeter2.DataHistory.windOnBuffer(DataBuffer buffer, Int64 totalAmount, Int32 increments)
at BitMeter2.DataHistory.NewData(Int64 downloadValue, Int64 uploadValue)
at BitMeter2.frmMain.tickProcessing(Boolean fromTimerEvent)
इस त्रुटि को ठीक करने के लिए मुझे ScriptHandlerFactory लाइनों को web.config में जोड़ना पड़ा:
<system.webServer>
<handlers>
<remove name="ScriptHandlerFactory" />
<add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</handlers>
</system.webServer>
क्यों यह एक वेब सर्वर पर इन लाइनों के बिना काम किया है और दूसरे को मैं नहीं जानता।
इस समस्या को ठीक करने के लिए मैं निम्नलिखित लाइन ऑफ कोड का उपयोग करता हूं। निम्नलिखित कोड web.config फ़ाइल में लिखें
<configuration>
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="50000000"/>
</webServices>
</scripting>
</system.web.extensions>
</configuration>
लोकलहोस्ट में विकसित होने पर मेरे पास यह मुद्दा नहीं था। हालाँकि, एक बार जब मैंने एक वेब सर्वर पर प्रकाशित किया, तो वेबसर्वर एक खाली (रिक्त) परिणाम दे रहा था और मुझे अपने लॉग में त्रुटि दिखाई दे रही थी।
मैंने अपना अजाक्स कंटेंट टाइप करके इसे ठीक किया:
"application/json; charset=utf-8"
और उपयोग:
JSON.stringify()
जिस वस्तु पर मैं पोस्ट कर रहा था।
var postData = {data: myData};
$.ajax({
type: "POST",
url: "../MyService.asmx/MyMethod",
data: JSON.stringify(postData),
contentType: "application/json; charset=utf-8",
success: function (data) {
console.log(data);
},
dataType: "json"
});
मुझे यह त्रुटि अपाचे मॉड-मोनो के साथ भी मिली। ऐसा लगता है कि webservice के लिए प्रलेखन पृष्ठ अभी तक लिनक्स में लागू नहीं हुआ है। लेकिन इस त्रुटि के बावजूद webservice काम कर रही है। आपको इसे ?WSDL
url के अंत में जोड़कर देखना चाहिए , यानी http: //localhost/WebService1.asmx? WSL
मेरे मामले में त्रुटि तब हुई जब मैं अपने स्थानीय पीसी विंडोज 10 से विंडोज 2012 के साथ एक समर्पित सर्वर पर जाता हूं। इसके लिए समाधान निम्नलिखित पंक्तियों को वेब में जोड़ना था।
<webServices>
<protocols>
<add name="Documentation"/>
</protocols>
</webServices>
Html में आपको GET के साथ कुछ इस तरह से कॉल को एक फॉर्म में संलग्न करना होगा
<a href="/service/servicename.asmx/FunctionName/parameter=SomeValue">label</a>
तुम भी एक का उपयोग कर सकते हैं POST
कार्रवाई का वेब सेवा के स्थान और इनपुट टैग के माध्यम से पैरामीटर इनपुट के साथ ।
SOAP
प्रॉक्सी क्लास भी हैं।
मेरे मामले में मेरे पास फ़ंक्शन का एक अधिभार था जो इस अपवाद का कारण बन रहा था, एक बार जब मैंने अपने दूसरे फ़ंक्शन का नाम बदल दिया तो यह ठीक चला, अनुमान लगाएं कि वेब सर्वर समर्थन फ़ंक्शन को ओवरलोडिंग नहीं करता है
हमारे मामले में समस्या वेब सेवा द्वारा विकल्प अनुरोध विधि (GET या POST के बजाय) का उपयोग करने के कारण हुई।
हम अभी भी नहीं जानते कि समस्या अचानक क्यों दिखाई दी। वेब सेवा HTTP और HTTPS दोनों पर 5 साल से पूरी तरह से चल रही थी। हम केवल वही हैं जो वेब सेवा का उपभोग करते हैं और यह हमेशा POST का उपयोग करता है।
हाल ही में हमने वेब सेवा एसएसएल को होस्ट करने वाली साइट बनाने का फैसला किया है। हमने नियमित रूप से GET और POST अनुरोध, विकल्प अनुरोधों के शीर्ष पर कुछ HTTP को HTTPS में परिवर्तित करने के लिए Web.config में फिर से लिखने के नियम जोड़े। विकल्प अनुरोध इस पोस्ट पर चर्चा की गई त्रुटि का कारण बने।
आवेदन के बाकी हिस्सों ने पूरी तरह से अच्छी तरह से काम किया। लेकिन हम इस समस्या के कारण सैकड़ों त्रुटि रिपोर्ट प्राप्त करते रहे।
विकल्प विधि को संभालने के लिए कई पोस्ट (जैसे यह एक ) पर चर्चा कर रहे हैं । हम Global.asax में सीधे विकल्प अनुरोध को संभालने के लिए गए थे। इससे समस्या दूर हो गई।
protected void Application_BeginRequest(object sender, EventArgs e)
{
var req = HttpContext.Current.Request;
var resp = HttpContext.Current.Response;
if (req.HttpMethod == "OPTIONS")
{
//These headers are handling the "pre-flight" OPTIONS call sent by the browser
resp.AddHeader("Access-Control-Allow-Methods", "GET, POST");
resp.AddHeader("Access-Control-Allow-Headers", "Origin, Content-Type, Accept, SOAPAction");
resp.AddHeader("Access-Control-Max-Age", "1728000");
resp.End();
}
}
मुझे यह त्रुटि तब तक हो रही थी जब तक कि मैंने अपने वेब सेवा कॉल की शुरुआत में $ .ospReady (सत्य) ( नीचे दिए गए कोड में दिखाया गया) और समाप्त होने के बाद $ । यह पेज की तैयार स्थिति को स्थगित करने के लिए jQuery की बात है इसलिए document.ready फ़ंक्शन के भीतर कोई भी स्क्रिप्ट इस के लिए इंतजार कर रही होगी (अन्य संभव लेकिन मेरे लिए अज्ञात के बीच)।
<span class="AjaxPlaceHolder"></span>
<script type="text/javascript">
$.holdReady(true);
function GetHTML(source, section){
var divToBeWorkedOn = ".AjaxPlaceHolder";
var webMethod = "../MyService.asmx/MyMethod";
var parameters = "{'source':'" + source + "','section':'" + section + "'}";
$.ajax({
type: "POST",
url: webMethod,
data: parameters,
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
xhrFields: {
withCredentials: false
},
crossDomain: true,
success: function(data) {
$.holdReady(false);
var myData = data.d;
if (myData != null) {
$(divToBeWorkedOn).prepend(myData.html);
}
},
error: function(e){
$.holdReady(false);
$(divToBeWorkedOn).html("Unavailable");
}
});
}
GetHTML("external", "Staff Directory");
</script>
सुनिश्चित करें कि आप कस्टम त्रुटियों को अक्षम करते हैं। यह आपके कोड में मूल समस्या का सामना कर सकता है:
परिवर्तन
<customErrors defaultRedirect="~/Error" mode="On">
सेवा
<customErrors defaultRedirect="~/Error" mode="Off">