এটি কোনও প্রশ্ন নয় - রেফারেন্সের জন্য এটি এখানে পোস্ট করা:
একটি ওয়েব সার্ভিস গ্রহণ করার সময়, আমি নিম্নলিখিত ত্রুটি পেয়েছি:
অনুরোধ ফর্ম্যাটটি অপ্রত্যাশিতভাবে / মাইমেথডনেমে শেষ হওয়া URL টির জন্য স্বীকৃত নয়
এটি কোনও প্রশ্ন নয় - রেফারেন্সের জন্য এটি এখানে পোস্ট করা:
একটি ওয়েব সার্ভিস গ্রহণ করার সময়, আমি নিম্নলিখিত ত্রুটি পেয়েছি:
অনুরোধ ফর্ম্যাটটি অপ্রত্যাশিতভাবে / মাইমেথডনেমে শেষ হওয়া URL টির জন্য স্বীকৃত নয়
উত্তর:
এই ওয়েবসাইটে একটি সমাধান খুঁজে পেয়েছি
আপনার যা দরকার তা হ'ল নিম্নলিখিতটি আপনার ওয়েবকনফাইগে যুক্ত করুন
<configuration>
<system.web>
<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
</protocols>
</webServices>
</system.web>
</configuration>
মাইক্রোসফ্ট থেকে আরও তথ্য
আমি খুঁজে পাওয়া সমস্ত তথ্যের 90% সত্ত্বেও (এই ত্রুটির সমাধানের সন্ধান করার সময়) আমাকে HttpGet
এবং HttpPost
কনফিগারেশনে যুক্ত করতে বলছিলাম, এটি আমার পক্ষে কার্যকর হয়নি ... এবং যাইহোক আমার কাছে তা বোঝায় না।
আমার অ্যাপ্লিকেশন প্রচুর সার্ভারে চলছে (30+) এবং তাদের কোনওটির জন্য আমাকে কখনও এই কনফিগারেশনটি যুক্ত করতে হয়নি। হয় অ্যাপ্লিকেশনটির সংস্করণ .NET 2.0 বা .NET 4.0 এর অধীনে চলছে।
আমার জন্য সমাধানটি ছিল আইআইএসের বিরুদ্ধে পুনরায় নিবন্ধকরণ করা।
এটি অর্জনের জন্য আমি নিম্নলিখিত কমান্ড লাইনটি ব্যবহার করেছি ...
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>
এটি সার্ভারে ভাল কাজ করে যেমন কলগুলি সরাসরি ওয়েবসার্চ ফাংশনে করা হয় - তবে আপনি ব্যর্থ হয়ে যাবেন যদি আপনি ডিবাগ পরিবেশে নেট থেকে সরাসরি চালনা করেন এবং ম্যানুয়ালি ফাংশনটি সঞ্চালনের পরীক্ষা করতে চান।
রেকর্ডের জন্য আমি এই ত্রুটিটি পেয়েছিলাম যখন আমি একটি পুরানো অ্যাপ্লিকেশনটিকে একটি সার্ভার থেকে অন্য সার্ভারে স্থানান্তরিত করি। আমি <add name="HttpGet"/> <add name="HttpPost"/>
ওয়েলকনফিগটিতে উপাদানগুলি যুক্ত করেছি , যা ত্রুটিটি এতে পরিবর্তন করেছে:
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)
এই ত্রুটিটি সমাধান করার জন্য আমাকে স্ক্রিপ্টহ্যান্ডলারফ্যাক্টরী লাইনগুলিকে ওয়েবকনফাইগে যুক্ত করতে হয়েছিল:
<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>
কেন এটি একটি ওয়েব সার্ভারে এই লাইনগুলি ছাড়া কাজ করেছিল এবং অন্যটি আমি জানি না।
আমি এই সমস্যাটি সমাধানের জন্য নিম্নলিখিত লাইন কোডটি ব্যবহার করি। ওয়েব কোডফাইগ ফাইলে নিম্নলিখিত কোডটি লিখুন
<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"
});
অ্যাপাচি মোড-মনোতেও আমি এই ত্রুটি পেয়েছি। দেখে মনে হচ্ছে ওয়েব সার্ভিসের জন্য ডকুমেন্টেশন পৃষ্ঠাটি এখনও লিনাক্সে প্রয়োগ করা হয়নি। কিন্তু এই ত্রুটি সত্ত্বেও ওয়েবসার্ভিস কাজ করছে। আপনার এটি ?WSDL
url এর শেষে যুক্ত করা উচিত , যেমন : http: //localhost/WebService1.asmx? WSDL
আমার ক্ষেত্রে ত্রুটিটি ঘটেছিল যখন আমি আমার স্থানীয় পিসি উইন্ডোজ 10 থেকে উইন্ডোজ 2012 এর সাথে একটি ডেডিকেটেড সার্ভারে চলে যাই। এর সমাধানটি ছিল নিম্নলিখিত লাইনগুলিতে ওয়েবকনফিগ যুক্ত করা
<webServices>
<protocols>
<add name="Documentation"/>
</protocols>
</webServices>
এইচটিএমএল এ আপনাকে জিইটি দিয়ে এএই ফর্মের সাথে কলটি বন্ধ করতে হবে এর মতো কিছু
<a href="/service/servicename.asmx/FunctionName/parameter=SomeValue">label</a>
আপনি একটি ব্যবহার করতে পারেন POST
ওয়েব সার্ভিসের লোকেশন এবং কোনও ইনপুট ট্যাগের মাধ্যমে প্যারামিটারটি ইনপুট করার সাথে অ্যাকশনটি ।
এছাড়াও SOAP
এবং প্রক্সি ক্লাস আছে।
আমার ক্ষেত্রে আমার একটি অতিরিক্ত ক্রিয়াকলাপ ছিল যা এই ব্যতিক্রম ঘটায়, আমি যখন আমার দ্বিতীয় ফাংশনটির নামটি পরিবর্তন করি তবে এটি ঠিক চলেছে, অনুমান করুন ওয়েব সার্ভার ফাংশন ওভারলোডিং সমর্থন করে না
আমাদের ক্ষেত্রে সমস্যাটি ওয়েব পরিষেবাটি অপশন অনুরোধ পদ্ধতি (জিইটি বা পোষ্টের পরিবর্তে) ব্যবহার করে ডেকে আনা হয়েছিল।
হঠাৎ সমস্যাটি কেন প্রকাশিত হয়েছিল তা আমরা এখনও জানি না। ওয়েব সার্ভিসটি এইচটিটিপি এবং এইচটিটিপিএস উভয়ই পুরোপুরি 5 বছর ধরে চলছিল। আমরা কেবলমাত্র ওয়েব পরিষেবা গ্রাহক এবং এটি সর্বদা পোস্ট ব্যবহার করে।
সম্প্রতি আমরা কেবলমাত্র ওয়েব সার্ভিস এসএসএলকে হোস্ট করা সাইটটি করার সিদ্ধান্ত নিয়েছি। আমরা কোনও কিছু HTTP কে এইচটিটিপিএসে রূপান্তর করতে, মোতায়েন এবং অবিলম্বে নিয়মিত জিইটি এবং পোষ্ট অনুরোধ, বিকল্পগুলির অনুরোধগুলির শীর্ষে পেতে শুরু করি। বিকল্পগুলির অনুরোধগুলি এই পোস্টে আলোচিত ত্রুটির কারণে ঘটেছে।
অ্যাপ্লিকেশন বাকি পুরোপুরি ভাল কাজ করে। তবে আমরা এই সমস্যার কারণে কয়েকশ ত্রুটি প্রতিবেদন পেতে থাকি।
বিকল্পগুলি কীভাবে পরিচালনা করতে হয় তা নিয়ে বেশ কয়েকটি পোস্ট রয়েছে (যেমন এটি একটি )। আমরা সরাসরি গ্লোবাল.এক্স্যাক্সে বিকল্পগুলির অনুরোধটি পরিচালনা করতে গিয়েছিলাম। এর ফলে সমস্যাটি বিলুপ্ত হয়ে যায়।
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();
}
}
আমি এই ত্রুটিটি পাচ্ছিলাম যতক্ষণ না আমি যুক্ত করেছি (নীচের কোডে দেখানো হয়েছে) web .হোল্ডারিডি (সত্য) আমার ওয়েব পরিষেবা কলের শুরুতে এবং $ .োল্ডারডি (মিথ্যা) এটি শেষ হওয়ার পরে। এই পৃষ্ঠার প্রস্তুত অবস্থা স্থগিত করার জন্য jQuery জিনিস তাই ডকুমেন্টের মধ্যে যে কোনও স্ক্রিপ্ট এটির জন্য অপেক্ষা করবে (আমার পক্ষে অন্যান্য সম্ভাব্য তবে অজানা)।
<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">