8

webmethod への jquery 呼び出しを機能させるのに苦労しています。「401 Unauthorized」という応答でサーバーからバウンスされています。web.config または他の場所に正しくない設定が必要であり、呼び出しの成功を妨げている可能性があります。

あなたの洞察は大歓迎です!

jquery 呼び出しを呼び出す js 関数の呼び出し

button.OnClickAction = "PageMethod('TestWithParams', ['a', 'value', 'b', 2], 'AjaxSucceeded', 'AjaxFailed'); return false;";

jquery 呼び出しを行う JavaScript 関数

function PageMethod(fn, paramArray, successFn, errorFn) {
var pagePath = window.location.pathname;
var urlPath = pagePath + "/" + fn;

//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: pagePath + "/" + fn,
    contentType: "application/json; charset=utf-8",
    data: paramList,
    timeout: 10000,
    dataType: "json",
    success: function(result) { alert('Overjoyed'); },
    error: function(result) { alert('No joy'); }
});
}

ページ内の Web メソッド

    public partial class WebLayout : System.Web.UI.Page
{

    [WebMethod()]
    public static int TestNoParams()
    {
        return 1;
    }

    [WebMethod()]
    public static string TestWithParams(string a, int b)
    {
        return a + b.ToString();
    }
...

Firebug コンソールに表示される応答

json: {"Message":"Authentication failed.","StackTrace":null,"ExceptionType":"System.InvalidOperationException"}

"NetworkError: 401 Unauthorized - http://localhost/Care-Provider-Home/Profile/Personal-Profile.aspx/TestWithParams" TestWithParams

この件に関する通常のサイト (Encosia など) を見て読んだことがありますが、役に立ちません。重要な部分が欠けているか、環境のセキュリティ パラメータに呼び出しを妨げる微妙な問題があります。

診断に影響を与える可能性があるその他の潜在的に役立つヒントを次に示します。

  • コードビハインドの Web メソッド
  • Sitecore CMS の使用 (干渉しているようには見えない、まったくわからない)
  • IIS7
  • .NET 3.5
  • jQuery1.3.2

あなたの洞察と方向性を楽しみにしています--ありがとう!

4

3 に答える 3

6

はい、うまくいきました!Sitecore CMS は URL の書き換えを実行してわかりやすい URL を生成するため (マスター ページの概念と同様に、ページを層状に動的に組み立てます)、最初に 401 エラーを引き起こした問題が発生している可能性があることに気付きました。単一の ASPX を使用して別のプロジェクトを作成することでこれを確認しました。いくつかの作業により、Web メソッドを呼び出し、jquery を使用して値を取得することができました。次に、Web ルートにほぼ同じ ASPX を作成しましたが、Sitecore にリクエストが行われたときにそれを無視するように指示しました (web.config の IgnoreUrlPrefixes)。ご協力いただきありがとうございます。

于 2010-02-22T08:18:17.247 に答える
2

Firebug コンソールからの json 応答は、最も有力な手がかり IMO を提供します。System.InvalidOperationException (奇妙なことに 401 応答に乗っている) は、さらに何かが働いていることを示唆しています。

まず、「InvalidOperationException webmethod jquery」でグーグルすると、シリアル化の問題がこの例外をスローする可能性があることを示唆する記事が返されます。これを除外するには、一時的に「data: paramList」を「data: '{}'」に変更します。さらに、デバッガーをアタッチして、メソッドが実行される前に例外が発生するか、メソッドが完了して結果をシリアル化しようとした後に例外が発生するかを確認します。

上記の手順が空である場合は、クリーンな web.config にリセットするか、「InvalidOperationException webmethod」検索から返される結果をさらに読むことをお勧めします。

于 2010-02-19T18:37:09.763 に答える
0

使用している場合、どの形式の認証を使用していますか? 最初に思いつくのは、IIS の webApp が匿名ユーザーを許可するように設定されていることを確認することです (実際に匿名ユーザーとして呼び出しを行いたい場合)。また、web.config の認証モードが誤って Windows に設定されていないことも確認してください。匿名ユーザーを許可できず、フォーム認証を使用している場合、ページからこの呼び出しを行う前に、ユーザーはログインする必要があります。

上記が適切に設定されている場合は、サーバー側からサービスを定期的に呼び出して、サービスの呼び出しポイントに関係なく問題が一貫していることを確認してください。

問題が解決しない場合は、さらに設定を投稿してください。お役に立てれば。

于 2010-02-19T17:42:02.410 に答える