web-dev-qa-db-ja.com

不明なWebメソッド。パラメーター名:methodName

この問題を調査する際、ほとんどのSO問題はstaticメソッドに関する修正でした。

実際の(そして少し洗練された)WebMethodで動作しないので、メソッド自体に到達できるかどうかを確認するために単純なものを作成しました。

_[WebMethod]
[ScriptMethod(UseHttpGet = false)]
public static string HelloWorld()
{
    return "Hello World!";
}
_

呼び出し。

_<script>
    $(document).ready(function () {
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "usersWebMethods.aspx/HelloWorld",
            dataType: "json",
            success: function (data) {
                alert(data.d);
            }
        });
   });
</script>
_

常に500 (Internal Server Error)になります

_Unknown web method HelloWorld.
Parameter name: methodName
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 
Exception Details: System.ArgumentException: Unknown web method HelloWorld.
Parameter name: methodName
_

なぜこれが失敗するのですか?

24
Daniel Sh.

実際の.aspxファイルに問題がありました。

<%@ Page Language="C#" 
         AutoEventWireup="true" 
         CodeBehind="xxx.xxx.cs" Inherits="xxx.xxx" %>

コードには存在しませんでした。どのように変更されましたか?知りません :(。

16
Daniel Sh.

私もこの問題を抱えていましたが、このメソッドが.asmxファイルに含まれていたため、わずかに異なって「静的」問題に遭遇しましたが、方法は異なりました。

Pageクラスの一部としてメソッドがある場合、must be staticである必要があります。

複数のページで使用するメソッドを.asmxファイルに配置した場合、must not be static

58
Rob Church

サーバー側の関数の上に[WebMethod]がない場合も、このエラーが発生します。

3
hogarth45

私にとって、主な問題はjavascript postを次のような引数なしで渡すように変更することでした

$http.post("Status.aspx/MyData", {})

次に、何もキャッシュされていないことを確認するために、public static string MyData()の上のコードビハインドファイルから[System.Web.Services.WebMethod]を削除しました。次に、プロジェクトを失敗するまでビルドし、前述の削除された属性を再度追加し、成功するまでビルドしました。

実行すると動作しました。

3
ΩmegaMan

正直に言うと、場合によっては疲れていることを「もう一度」認識しました。

私にとっては、それはprivateメソッドではなくpublicメソッドでした。

1
smlnl