0

AJAX を使用して ASMX Web サービスと通信する ASP.NET プロジェクトに取り組んでいます。ページの 1 つは、ScriptManager を使用して Web サービスの ASMX ファイルを参照します。絶対 URI を使用して参照されます。

最近、ASP.NET プロジェクトと Web サービスの両方を IIS Express を使用するように変更しました。それぞれが異なるポート番号を持つようになりました。この変更以降、ASP.NET プロジェクトのクライアント側コードは Web サービスにアクセスできません。

ASP.NET ページ用に生成された HTML コードには、Web サービスへの正しい参照が含まれています。

<script src="http://localhost:2837/Service.asmx/jsdebug" type="text/javascript"></script>

ただし、このスクリプトは、絶対 URL ではなく相対 URL を使用して Web サービスを参照するだけです。

Service.set_path("/Service.asmx");

したがって、Web サービスの代わりに ASP.NET アプリケーションのホスト名が使用されるため、Web サービス メソッドへの AJAX 呼び出しは失敗します。

POST http://localhost:2827/Service.asmx/WebServiceMethod 500 (Internal Server Error)

上記のポート番号は、Web サービスで使用されるものとは異なることに注意してください。上記のポート番号は、Web アプリケーションで使用されるものです。

HTTP 500 は、Web サーバーが次のように報告しているため生成されます。

次の場所に Web サービスが見つかりません: /Service.asmx

Web サービスが正しく参照されるようにするには、どうすればこれを修正できますか?

4

1 に答える 1

1

Web サービスの公開からクライアント スクリプトへ:

ServiceReference オブジェクトは、ページと同じドメイン内の Web サービスのみを参照できます。Web サービス パスは、相対パス、アプリケーション相対パス、ドメイン相対パス、または絶対パスにすることができます。絶対パスの場合、パスが同じドメイン内にあることを確認する必要があります。

したがって、別のドメインにある Web サービス メソッドを呼び出すことはできません。できることは、asp.net プロジェクトに別のサービスを作成して、元の Web サービスを呼び出すことです。次に、スクリプトマネージャーから新しく作成された Web サービスメソッドを呼び出すことができます

于 2013-08-26T04:44:13.160 に答える