この問題を調査する際、ほとんどの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
_
なぜこれが失敗するのですか?
実際の.aspxファイルに問題がありました。
<%@ Page Language="C#"
AutoEventWireup="true"
CodeBehind="xxx.xxx.cs" Inherits="xxx.xxx" %>
コードには存在しませんでした。どのように変更されましたか?知りません :(。
私もこの問題を抱えていましたが、このメソッドが.asmxファイルに含まれていたため、わずかに異なって「静的」問題に遭遇しましたが、方法は異なりました。
Pageクラスの一部としてメソッドがある場合、must be static
である必要があります。
複数のページで使用するメソッドを.asmxファイルに配置した場合、must not be static
。
サーバー側の関数の上に[WebMethod]
がない場合も、このエラーが発生します。
私にとって、主な問題はjavascript post
を次のような引数なしで渡すように変更することでした
$http.post("Status.aspx/MyData", {})
次に、何もキャッシュされていないことを確認するために、public static string MyData()
の上のコードビハインドファイルから[System.Web.Services.WebMethod]
を削除しました。次に、プロジェクトを失敗するまでビルドし、前述の削除された属性を再度追加し、成功するまでビルドしました。
実行すると動作しました。
正直に言うと、場合によっては疲れていることを「もう一度」認識しました。
私にとっては、それはprivate
メソッドではなくpublic
メソッドでした。