অনুরোধ ফর্ম্যাটটি অপ্রত্যাশিতভাবে শেষ হওয়া URL টির জন্য অচেনা


283

এটি কোনও প্রশ্ন নয় - রেফারেন্সের জন্য এটি এখানে পোস্ট করা:

একটি ওয়েব সার্ভিস গ্রহণ করার সময়, আমি নিম্নলিখিত ত্রুটি পেয়েছি:

অনুরোধ ফর্ম্যাটটি অপ্রত্যাশিতভাবে / মাইমেথডনেমে শেষ হওয়া URL টির জন্য স্বীকৃত নয়


4
গুগলের পক্ষে এটি আরও সহজ করার জন্য, ত্রুটি বার্তার জার্মান অনুবাদটি " আনব্যাকান্টেস অ্যানফর্ডার্ংসফর্ম্যাট ফর ইউএন ইউআরএল, ডাই আনওয়ারওয়ারেট মিট '/ _ মাইমথোডনেম' এন্ডেটে পড়ে। "
উয়ে কেইম

এবং চীনা অনুবাদ: " 無法 辨認 要求 格式 , 因為 ইউআরএল 未 預期 地 以 / myMethodName 結束。 "
Ignatius

উত্তর:


515

এই ওয়েবসাইটে একটি সমাধান খুঁজে পেয়েছি

আপনার যা দরকার তা হ'ল নিম্নলিখিতটি আপনার ওয়েবকনফাইগে যুক্ত করুন

<configuration>
  <system.web>
    <webServices>
      <protocols>
        <add name="HttpGet"/>
        <add name="HttpPost"/>
      </protocols>
    </webServices>
  </system.web>
</configuration>

মাইক্রোসফ্ট থেকে আরও তথ্য


3
আমি আপনাকে যা করতে হবে তা হ'ল <system.web> এ <system.webserver>
রোমান এম

আমি এটি যেমনটি রেখেছি এবং আপাতত ত্রুটিটি চলে গেছে বলে মনে হচ্ছে। যদি আমি ত্রুটিটি আবার দেখি তবে আমি ওয়েবসার্ভিস কনফিগারেশনগুলিকে ওয়েবসারভার বিভাগে সরিয়ে দেব।
ড্যানিয়েল ব্রিংক

1
এবং যদি এই ত্রুটিটি কোনও নিয়মিততা ছাড়াই ফেলে দেওয়া হয়, ঠিক মাঝে মাঝে? এই ধরনের কলগুলি কি কিছু ক্লায়েন্ট / ব্রাউজার কনফিগারেশনের উপর নির্ভরশীল !?
ভ্লাদিস্লাভ

2
আইআইএস 8 এর সাথে একটি Win2012srv এ এটির দরকার ছিল। আইআইএস 8 সহ উইন 8 এ এটির দরকার ছিল না। আমি জানি কনফিগারেশনটিতে অন্য কোনও ত্রুটি নেই।
লসম্যানোস

1
@ সৌরভরাই আমাকেও এটা কি করল? উত্তরে প্রদত্ত লিঙ্কগুলি নষ্ট হয়ে গেছে।
রড

18

আমি খুঁজে পাওয়া সমস্ত তথ্যের 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যদিও এটি স্থির।
নট

16

নিশ্চিত করুন যে আপনি সঠিক পদ্ধতিটি ব্যবহার করছেন: পোস্ট করুন / পান, সঠিক সামগ্রীর ধরণ এবং ডান প্যারামিটার (ডেটা)।

$.ajax({
    type: "POST",
    url: "/ajax.asmx/GetNews",
    data: "{Lang:'tr'}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (msg) { generateNews(msg); }
})

1
আমার প্যারামিটার মানটি পাস করার ফলে ডেটাটাইপ, এবং অনুপস্থিত মানগুলির কারণে সমস্যাটি পেয়েছে, যা 500 ত্রুটিতে শেষ হয়। এখন এটি সমাধান করা হয়।
প্রণেশ জনার্থনন

content-type: application/jsonআমার জন্যও এই সমস্যার সমাধান করুন ।
ডেলফি.বয়

10

চমত্কার।

কেস 2 - যেখানে একই সমস্যা দেখা দিতে পারে) আমার ক্ষেত্রে সমস্যাটি নিম্নলিখিত লাইনের কারণে হয়েছিল:

<webServices>
  <protocols>
    <remove name="Documentation"/>
  </protocols>
</webServices>

এটি সার্ভারে ভাল কাজ করে যেমন কলগুলি সরাসরি ওয়েবসার্চ ফাংশনে করা হয় - তবে আপনি ব্যর্থ হয়ে যাবেন যদি আপনি ডিবাগ পরিবেশে নেট থেকে সরাসরি চালনা করেন এবং ম্যানুয়ালি ফাংশনটি সঞ্চালনের পরীক্ষা করতে চান।


.Asmx পরিষেবাটিতে ব্রাউজ করার সময় সংজ্ঞাটি প্রদর্শন থেকে বাঁচানোর জন্য সেই যুক্তিকে ওয়েবকনফাইগটিতে যুক্ত করা হয়েছে। দৃশ্যত এটি অ্যাক্টিভোরপোর্টগুলি ভেঙে দিয়েছে। এটি সম্ভবত স্থানীয় পরীক্ষার লক্ষণ এবং এটি সার্ভারে কাজ করবে বলে জেনে খুশি। ধন্যবাদ।
জ্যাকব বার্নস

2

রেকর্ডের জন্য আমি এই ত্রুটিটি পেয়েছিলাম যখন আমি একটি পুরানো অ্যাপ্লিকেশনটিকে একটি সার্ভার থেকে অন্য সার্ভারে স্থানান্তরিত করি। আমি <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>

কেন এটি একটি ওয়েব সার্ভারে এই লাইনগুলি ছাড়া কাজ করেছিল এবং অন্যটি আমি জানি না।


1

আমি এই সমস্যাটি সমাধানের জন্য নিম্নলিখিত লাইন কোডটি ব্যবহার করি। ওয়েব কোডফাইগ ফাইলে নিম্নলিখিত কোডটি লিখুন

<configuration>
    <system.web.extensions>
       <scripting>
       <webServices>
       <jsonSerialization maxJsonLength="50000000"/>
      </webServices>
     </scripting>
   </system.web.extensions>
</configuration>

1

লোকালহোস্টে বিকাশ করার সময় আমার সমস্যাটি ছিল না। যাইহোক, আমি একবার একটি ওয়েব সার্ভারে প্রকাশ করি, ওয়েবসার্ভিসটি একটি খালি (ফাঁকা) ফলাফল ফিরিয়ে আনছিল এবং আমি আমার লগগুলিতে ত্রুটিটি দেখছিলাম।

আমি আমার এজাক্স সামগ্রী সামগ্রীটি সেট করে এটি ঠিক করেছি:

"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"
            });

1

অ্যাপাচি মোড-মনোতেও আমি এই ত্রুটি পেয়েছি। দেখে মনে হচ্ছে ওয়েব সার্ভিসের জন্য ডকুমেন্টেশন পৃষ্ঠাটি এখনও লিনাক্সে প্রয়োগ করা হয়নি। কিন্তু এই ত্রুটি সত্ত্বেও ওয়েবসার্ভিস কাজ করছে। আপনার এটি ?WSDLurl এর শেষে যুক্ত করা উচিত , যেমন : http: //localhost/WebService1.asmx? WSDL


1

আমার ক্ষেত্রে ত্রুটিটি ঘটেছিল যখন আমি আমার স্থানীয় পিসি উইন্ডোজ 10 থেকে উইন্ডোজ 2012 এর সাথে একটি ডেডিকেটেড সার্ভারে চলে যাই। এর সমাধানটি ছিল নিম্নলিখিত লাইনগুলিতে ওয়েবকনফিগ যুক্ত করা

<webServices>
        <protocols>
               <add name="Documentation"/>
        </protocols>
</webServices>

0

এইচটিএমএল এ আপনাকে জিইটি দিয়ে এএই ফর্মের সাথে কলটি বন্ধ করতে হবে এর মতো কিছু

<a href="/service/servicename.asmx/FunctionName/parameter=SomeValue">label</a>

আপনি একটি ব্যবহার করতে পারেন POST ওয়েব সার্ভিসের লোকেশন এবং কোনও ইনপুট ট্যাগের মাধ্যমে প্যারামিটারটি ইনপুট করার সাথে অ্যাকশনটি ।

এছাড়াও SOAPএবং প্রক্সি ক্লাস আছে।


0

আমার ক্ষেত্রে আমার একটি অতিরিক্ত ক্রিয়াকলাপ ছিল যা এই ব্যতিক্রম ঘটায়, আমি যখন আমার দ্বিতীয় ফাংশনটির নামটি পরিবর্তন করি তবে এটি ঠিক চলেছে, অনুমান করুন ওয়েব সার্ভার ফাংশন ওভারলোডিং সমর্থন করে না


0

আমাদের ক্ষেত্রে সমস্যাটি ওয়েব পরিষেবাটি অপশন অনুরোধ পদ্ধতি (জিইটি বা পোষ্টের পরিবর্তে) ব্যবহার করে ডেকে আনা হয়েছিল।

হঠাৎ সমস্যাটি কেন প্রকাশিত হয়েছিল তা আমরা এখনও জানি না। ওয়েব সার্ভিসটি এইচটিটিপি এবং এইচটিটিপিএস উভয়ই পুরোপুরি 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();
        }
    }

0

আমি এই ত্রুটিটি পাচ্ছিলাম যতক্ষণ না আমি যুক্ত করেছি (নীচের কোডে দেখানো হয়েছে) 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>

-1

নিশ্চিত করুন যে আপনি কাস্টম ত্রুটিগুলি অক্ষম করেছেন। এটি আপনার কোডটিতে মূল সমস্যাটি মাস্ক করতে পারে:

পরিবর্তন

<customErrors defaultRedirect="~/Error" mode="On">

প্রতি

<customErrors defaultRedirect="~/Error" mode="Off">

-1

একটি ওয়েবমেথোদ যার একটি কনটেক্সটকি দরকার,

[WebMethod]
public string[] GetValues(string prefixText, int count, string contextKey)

যখন এই কীটি সেট করা নেই, তখন ব্যতিক্রমটি পেল।

অটো কমপ্লিট এক্সটেন্ডারের কী বরাদ্দ করে এটি ঠিক করা।

ac.ContextKey = "myKey";
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.