web-dev-qa-db-ja.com

WebMethod vs ScriptMethod

[WebMethod]属性でマークされたメソッドを持つ.NET 3.5 aspxプレースがあります。これをjQueryで呼び出して、JSONを両方向に送信します。これはすべてうまくいきます。私の質問は、メソッドに適用されたときに[ScriptMethod]は何をするのですか?私はこれを試しましたが、同じ結果が得られるようです。 ScriptMethodWebMethodは同一で互換性がありますか、それとも一方が提供しない機能やオーバーヘッドを提供しますか?一般的に、Webサービスを実装するために利用できるすべてのオプションと混同されているため、それぞれの長所と短所を知りたいと思います。

43
Steve Johnson

次の2つのシナリオでScriptMethod属性を使用します。

  1. Jqueryまたは他のajaxリクエストメカニズムを使用していますが、リクエストはPOSTではなくGETにする必要があります。
  2. JavaScriptでXML形式の応答を受け取りたい。

上記の要件のいずれかがない場合。 ajaxリクエストを使用するJSON応答が必要な場合は、WebMethodを使用するだけです。

ScriptService属性を使用するのはいつですか?これは、Microsoft Ajax Clientスクリプトフレームワークを使用している場合に使用されます。この属性は、通常のオブジェクトと同じように関数を呼び出すことができるように、クライアント上でプロキシオブジェクトを生成するようサーバーに指示します。 var MyRemoteObject = new RemoteObject();MyRemoteObject.getMessage(....)およびScriptService属性を使用する場合でも、上記のシナリオでのみScriptMethod属性を追加する必要はありません。

ScriptService属性とScriptMethod属性は、WebService属性とWebMethod属性のように一緒に機能すると考えたため、最初は混乱していました。

32

ScriptMethodAttribute属性はオプションです。 (ただし、クライアントスクリプトから呼び出すことができるメソッドには、System.Web.Services .. ::。WebMethodAttribute属性が適用されている必要があります。)メソッドがScriptMethodAttributeでマークされていない場合、メソッドはHTTP POSTコマンドを使用して呼び出され、応答はJSONとしてシリアル化されます。この設定をスクリプトからオーバーライドすることはできません。

from- http://msdn.Microsoft.com/en-us/library/system.web.script.services.scriptmethodattribute.aspx

編集:WebMethodとScriptMethodは競合する属性ではありません。上記のように、ScriptMethodは追加の注釈になる可能性があります。

2
shahkalpesh