11

ASP.NET webmethod への次の jQuery 投稿があります。

$.ajax({
    type: "POST",
    url: "AjaxWebMethods.aspx/UpdNote",
    contentType: "application/json; charset=utf-8",
    data: "{'ID' : '" + id + "', 'note' : '" + note + "' }",
    dataType: "json",
    success: UpdNote_Success,
    error: AjaxError
});

そして、Web メソッドが宣言されます。

[System.Web.Services.WebMethod(enableSession: true)]
public static int UpdNote(int ID, string note) {
    // business logic that eventually returns a number, but simplifying
    // ... for the sake of brevity
    int retNum = 99;

    return retNum;
}

jQuery ポストと Web メソッドはどちらも、Windows 認証環境でうまく機能します (つまり、ユーザーは LDAP によって認証されます)。しかし、最近、サイトにアクセスするために、ユーザーの認証に RSA (2 要素認証、PIN およびトークン コード) を使用するサーバーに Web サイトを移動する必要がありました。そして、私が今見ているのは、すべての jQuery 投稿が「405 エラー」を返していることです。

明らかにクロスサイト リクエストが頭に浮かびますが、ここではそのどれも行われていません。すべての jQuery AJAX 投稿は、AjaxWebMethods.aspx で宣言されている Web メソッドを使用しています。このページはサイト独自のドメインにあります。

ヘルプや提案をお寄せいただきありがとうございます。

編集:

IE8 で Fiddler を使用すると、もう少し情報が得られます。返されるエラー コードは 405 のままですが、サーバー エラーの方がわかりやすいです。サーバー エラーは、「パス '/AjaxWebMethods.aspx/UpdNote' へのアクセスに使用される HTTP 動詞 POST は許可されていません」です。

ajax リクエストの type パラメータを GET に変更しようとしましたが、代わりに 404 が返されました (リソースが見つかりません)。

また、これが SSL 経由であることを忘れていました (ただし、これが違いを生むとは思いません)。

編集:

広範なテスト (および、stackoverflow の賢明なメンバーからの広範な支援) の後、405 エラーは Web サイトが使用しているアプリケーション プールに直接関係しており、より具体的には、アプリケーション プールに選択されているマネージド パイプライン モードに関係していると判断しました。

v4.0 (.NET Framework) と統合 (マネージド パイプライン モード) を対象とするアプリケーション プールを使用すると、AJAX の投稿は正常に機能します。しかし、v4.0 およびクラシック (マネージド パイプライン モード) を対象とするアプリケーション プールを使用すると、405 エラーが発生します。

したがって、この時点で、私はまだこの問題の解決策を探していますが、問題を解決することはできました。

4

5 に答える 5

3

これに基づいて:

jQuery ポストと Web メソッドはどちらも、Windows 認証環境 (つまり、ユーザーは LDAP によって認証されます) でうまく機能します。しかし、最近、サイトにアクセスするために、ユーザーの認証に RSA (2 要素認証、PIN およびトークン コード) を使用するサーバーに Web サイトを移動する必要がありました。そして、私が今見ているのは、すべての jQuery 投稿が「405 エラー」を返していることです。

エラーがサーバー構成に関連していることは明らかですが、可能であれば、RSA サーバーに新しいサイトを作成し、このサイトに対して RSA 認証を無効にすることを完全に確認するために、サイトを参照してみてください。エラーはRSA認証にのみ関連しており、新しいサーバーで欠落しているコード関連のコンポーネント/構成を破棄します

コード関連の構成の問題を破棄したら、RSA 構成を再確認することをお勧めします (これは難しい場合があります)。サーバー間で SSO を実装するために RSA セキュリティを使用するプロジェクトに取り組んだことがあります。(シングル サインオン)、サーバー レベルでインストールされた RSA ISAPI フィルターがあったことを覚えています。このフィルターは、Active Directory サーバーに対して各要求を認証するために、認証 Cookie の読み取り/設定を担当していました。

各要求はこのフィルターによって管理され、この ISAPI フィルターはパイプラインの最上位にあったため、すべての要求は、認証されるために最初に RSA ISAPI フィルターによって処理される必要がありました。

したがって、AJAX投稿をブロックしているものがあるかどうかを検出するために、RSA構成を再確認することをお勧めします

RSA 構成は黒魔術の箱のようなものだったのを覚えています。十分なドキュメントがなく、構成は PITA でした。これがあなたの組織に当てはまらないことを心から願っています

于 2012-07-01T22:09:42.770 に答える
1

405 HTTP コードは「メソッドが許可されていません」コードです。そのため、新しいアーキテクチャに誤った設定があります。間違いなくサーバーの設定ミスです。このエラーはさまざまな場所で発生する可能性があり、サーバーにアクセスできないと、他の誰かが何が起こっているのかを伝えるのが非常に難しくなります. しかし、おそらく私はあなたにいくつかの出発点を与えることができます...

を再確認しましたweb.configか? これは、このようなエラーが発生する一般的な場所です。

IIS ログを確認しましたか? それはまた、始めるのに非常に良い場所です。

リクエストの contentType を設定せずに POST しようとするとどうなりますか? ページが JSON リクエストを受信するように設定されていない可能性があります。

Fiddlerを使ってみましたか? 外部クライアントから POST リクエストを送信してみてください。

アップデート

さらにいくつかの提案:

SSLを無効にしてみましたか?問題が SSL に関連していないことを確認するためだけに無効にします。

URLの書き換えを行っていますか?もしそうなら、これは確かに関連している可能性があります。

任意の URL に正常に POST できますか? IIS で POST が完全に無効になっている可能性があります。もしそうなら、これはあなたがそれを有効にするのに役立つ記事であり、ここにも役立つかもしれないスレッドがあります.

に HttpPost を追加しようとしましたweb.configか? このようなもの:

<webServices>
   <protocols>
      <add name="HttpPost" />
   </protocols>
</webServices>
于 2012-07-01T20:09:53.403 に答える
0

サーバーにajax拡張機能がインストールされていない可能性があります。binフォルダーへの参照をマークCopyLoacal = trueし、Webサーバーにデプロイしてみてください。

于 2012-07-01T20:19:12.773 に答える
0

トラブルシューティングの目的で、AJAX「POST」をAJAX「GET」に変更してみてください。ajax postメソッドを使用するページを開発環境から本番環境に移動した後、わずかに同様の問題が発生しました。

于 2012-06-29T12:09:11.983 に答える
0

HTTP405はコード エラーではなくサーバー エラーであり、リソース (URL) が間違った方法でアクセスされていることを示します。POST の代わりに GET を使用してみてください。

于 2012-07-01T20:01:57.467 に答える