web-dev-qa-db-ja.com

で終わるURLのリクエスト形式が認識されません

これは質問ではありません-参照用にここに投稿してください:

WebServiceを使用すると、次のエラーが発生しました。

/ myMethodNameで予期せずに終了するURLの要求形式が認識されません

264
roman m

このWebサイト で解決策を見つけました

必要なのは、web.configに以下を追加することです

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

Microsoft からの詳細情報

486
roman m

(このエラーの解決策を探している間に)私が見つけたすべての情報の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
17
freefaller

正しい方法を使用していることを確認してください:Post/Get、正しいコンテンツタイプ、正しいパラメーター(データ)。

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

見事。

ケース2-同じ問題が発生する可能性がある場合)私の場合、問題は次の行によるものでした:

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

呼び出しはwebservice関数に対して直接行われるため、サーバーで正常に機能しますが、デバッグ環境で.Netからサービスを直接実行し、関数の手動実行をテストする場合は失敗します。

10
Kalpesh Popat

記録のために、古いアプリをあるサーバーから別のサーバーに移動したときにこのエラーが発生しました。 <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>

1つのWebサーバーでこれらの行がなくても機能し、他のWebサーバーでは機能しなかった理由はわかりません。

2
Sprintstar

私の場合、ローカルPCのWindows 10からWindows 2012の専用サーバーに移動するとエラーが発生しました。解決策はweb.configに次の行を追加することでした

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

この問題を修正するには、次のコード行を使用します。 web.configファイルに次のコードを記述します

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

Htmlでは、次のようなGETを含むフォームで呼び出しを囲む必要があります

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

また、POSTをWebサービスの場所であるアクションと共に使用し、inputタグを介してパラメーターを入力することもできます。

SOAPおよびプロキシクラスもあります。

0
Dave

私の場合、この例外を引き起こしている関数のオーバーロードがありましたが、2番目の関数の名前を変更するとOKになりました、Webサーバーは関数のオーバーロードをサポートしていないと思います

0
Amir Shrestha

Apache mod-monoでもこのエラーが発生しました。 Linuxでは、webserviceのドキュメントページがまだ実装されていないようです。しかし、このエラーにもかかわらずWebサービスは機能しています。 URLの末尾に?WSDLを追加することで確認できます。つまり、 http://localhost/WebService1.asmx?WSDL

0
l0pan

私たちの場合、問題は(GETまたはPOSTの代わりに)OPTIONS要求メソッドを使用して呼び出されるWebサービスによって引き起こされました。

問題が突然発生した理由はまだわかりません。 Webサービスは、HTTPとHTTPSの両方で5年間完全に実行されていました。 Webサービスを使用するのは私たちだけであり、常にPOSTを使用しています。

最近、WebサービスSSLのみをホストするサイトを作成することにしました。 Web.configに書き換えルールを追加して、HTTPをHTTPSに変換し、展開し、すぐに通常のGETおよびPOSTリクエスト、OPTIONSリクエストに加えて取得を開始しました。 OPTIONSリクエストにより、この投稿で説明したエラーが発生しました。

残りのアプリケーションは完璧に機能しました。しかし、この問題が原因で何百ものエラーレポートを取得し続けました。

OPTIONSメソッドの処理方法を説明する投稿がいくつかあります(例 this one )。 Global.asaxでOPTIONSリクエストを直接処理しました。これにより、問題は消滅しました。

    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
cockypup

(以下のコードに示すように)$。holdReady(true)を追加するまでこのエラーが発生していました。Webサービス呼び出しの開始時に$。holdReady(false) =終了後。これはページの準備完了状態を一時停止する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>
0
bestinamir

ローカルホストで開発する際に問題はありませんでした。ただし、Webサーバーに公開すると、Webサービスは空(空白)の結果を返し、ログにエラーが表示されていました。

私はajax contentTypeを次のように設定して修正しました:

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