0

jQuery を使用して、同じ Web サイトにある C# Web サービスに対して AJAX 呼び出しを実行しようとしています。何を見つけて試しても、500 エラーが発生し続けます。

Request format is unrecognized for URL unexpectedly ending in '/MyTest'.

Web ページからの jQuery AJAX 呼び出し

    $.ajax({
        type: "POST",
        url: 'http://172.1.1.10/MYService/MyService.asmx/MyTest',
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            alert(data);
        },
        error: function (data, errorThrown) {
            alert("Fail");
            alert(errorThrown);
        }
    });

Web サービス (MyService.asmx) コード ビハインド

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string MyTest()
{
    return "Hello World";
}

はい、上部に次のコメントがありません。

[System.Web.Script.Services.ScriptService]

Web ページを読み込もうとすると、「失敗」という警告ウィンドウが表示されます。これは、500 エラーを受け取ったときです (投稿の上部を参照)。

これを Web サービスの web.config に追加することを提案する人が多すぎます。

Web サービス (Web.config)

<configuration>
  <system.web>
    <webServices>
      <protocols>
        <add name="HttpGet"/>
        <add name="HttpPost"/>
      </protocols>
    </webServices>
  </system.web>
 </configuration>

これを追加すると、次のアドレスでローカル マシンをヒットできます。

http://172.1.1.10/MYService/MyService.asmx/MyTest

「Hello World」の適切な応答が得られます。これを追加する前は、ローカルで同じ 500 エラー メッセージが表示されていました。

Web サービスと Web サイトの両方が、IIS の同じ Web サイトの下で、それぞれ独自のアプリケーションとして同じ IIS インスタンスにセットアップされます。これが true の場合に一般的に発生する 503 エラーや、File Not Found の 404 エラーが発生していないため、クロスドメインの問題ではないことはわかっています。

私はウェブを精査しましたが、これに対する解決策が見つからないようです。

4

3 に答える 3

0

nick_w のおかげで、Chrome のコンソール機能を使用すると、次のエラーが表示されました。

XMLHttpRequest cannot load http://172.1.1.10/MYService/MyService.asmx/MyTest. Origin http://mydomain.mysitename.com is not allowed by Access-Control-Allow-Origin.

自分のサイトを閲覧しているときに、次のドメイン名を使用していることに気付きました。

http://mydomain.mysitename.com

コードで Web サービスを呼び出すときは、IP アドレスを使用していました。

http://172.1.1.10

したがって、技術的にはクロスドメインの問題が発生していました。IP アドレスで自分のサイトにアクセスするか、Web サービスの呼び出しを次のように変更したら:

http://mydomain.mysitename.com/MyService/MyService.asmx/MyTest

その後、問題なく解決しました。コードを次のように更新する必要がありました。

$.ajax({
    type: "POST",
    url: 'http://mydaomin.mysitename.com/MYService/MyService.asmx/MyTest',
    data: "{}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (data) {
        alert(data.d);
    },
    error: function (data, errorThrown) {
        alert("Fail");
        alert(errorThrown);
    }
});

結果ではなく「オブジェクトオブジェクト」を返すため、アラートに「.d」を追加したことに注意してください。

于 2012-11-26T15:45:50.260 に答える