2009-08-28 4 views
3

私はCreateTicket.aspx.csでこの方法でページを持っている:ページ上のPage WebMethodを呼び出してJavascriptを呼び出すと、「500:Unknown web method」という結果になるのはなぜですか?

[WebMethod()] 
public static string Categories() 
{ 
    var business = new CategoryBusiness(); 
    var categories = business.ListRootCategories(); 

    return categories.Json(); 
} 

とJavaScript/jQueryのコード(同じページ、.aspxの):

function LoadRootCategories() { 
    PageMethod("CreateTicket.aspx", "Categories", [], LoadCategoriesSucceded, LoadCategoriesFailed); 
} 


function PageMethod(page, fn, paramArray, successFn, errorFn) 
{ 
    //Create list of parameters in the form: 
    //{"paramName1":"paramValue1","paramName2":"paramValue2"} 
    var paramList = ''; 
    if (paramArray.length > 0) 
    { 
     for (var i=0; i<paramArray.length; i+=2) 
     { 
      if (paramList.length > 0) paramList += ','; 
       paramList += '"' + paramArray[i] + '":"' + paramArray[i+1] + '"'; 
     } 
    } 
    paramList = '{' + paramList + '}'; 
    //Call the page method 
    $.ajax({ 
     type: "POST", 
     url: page + "/" + fn, 
     contentType: "application/json; charset=utf-8", 
     data: paramList, 
     dataType: "json", 
     success: successFn, 
     error: errorFn 
    }); 
} 

は上にそれを実行します火かき棒、私はコンソールで次のエラーが発生します:

500 Internal Server Error 
Unknown web method Categories. 
[ArgumentException: Unknown web method Categories. 
Parameter name: methodName] 
    System.Web.Script.Services.WebServiceData.GetMethodData(String methodName) +517489 
    System.Web.Handlers.ScriptModule.OnPostAcquireRequestState(Object sender, EventArgs eventArgs) +168 
    System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +68 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean&amp; completedSynchronously) +75 

どうしてですか?

答えて

6

この問題は解決しました。

何が起こったのですか? (いつものように)愚かな何か:

  • CreateTicket.aspx.csがさえ分離コード属性を使用して、部分クラスとして拘束されていなかったので、「継承」属性は、CreateTicket.aspxページ宣言で欠落していました。
+0

これはどうしたの? –

+2

おそらくCopyAndPasteExceptionです。 –

0

CreateTicket.aspxはWebServiceから継承しますか?

でも、あなたのクラスにはScriptService属性がある必要があります。そのため、.NETはJavaScriptから呼び出すための追加クラスを生成します。

注:これは、WCF以外のWebサービスにのみ適用されます。 WCFは、Webサービスを行うための独自の属性を追加します。

+0

CreateTicket.aspxはSystem.Web.UI.Pageから継承します。 ScriptService属性はありませんでしたが、追加してもエラーはそのままです=/ –

+0

Microsoftのサイトで見たaspx Webサービスのすべての例は、むしろSystem.Web.Services.WebServiceから継承するaspxページを持っていますSystem.Web.UI.Pageよりも。私が.NET 2.0でWebサービスを扱ったのは、ashxページを使った唯一の時間なので、aspxサービスページを書く経験はあまりありません。 – Powerlord

+0

@R。 Bembrose:彼はWebサービスを使用していないので、ここで概説したようにPageMethodを使用しています:http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/ –

0

.NET 3.5以降の場合は、WCFサービスを設定することもできます。

上記のサービスを作成するために、クラスにOperationsContractアノテーションとDataContractアノテーションを設定する方法については、CodeProjectにquick guideがあります。

+0

私は欲しい同じページ(コードビヘイビア、CreateTicket.aspx.cs)にWebMethodを持たせるには、WCFでこれを行うことができますか? –

関連する問題