- - PR -
ScriptService属性の記述の要否
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-06-08 11:04
お世話になります。
AJAX関係ですが、@ITのTIPSを読んでいると、クライアントスクリプトからウェブサービスを呼び出す場合、呼び出されるクラスに [ScriptService()] というScriptService属性の記述が必要だとかかれています。 しかし、これを知らなかったため、AJAXを触り始めてすぐに、ボタンを押したら計算結果を返してくるという(ScriptService属性のない)SOAPウェブサービスとそれ利用するプログラム側を作った上で、利用する側でボタンと結果表示のラベルをUpdatePanel内に入れてみたところ、特に問題なく動いてしまいました。 他の人のブログを見ると、ScriptManagerの中に参照先(.asmx)を入れたりしないといけないようなことも書いてあるのですが、そういうこともしていません。まさに、AJAXを使わないコードそのままでUpdatePanelにぶちこんだだけという状態です。 もしかして、ちゃんと動いているように見えているだけで、裏ではエラーになっていたりとかするのだろうか?とか、UpdatePanelだけ特別?などと思ったりしています。(他のAJAX Controlはまだ試していませんが) UpdatePanelも結局はScriptで非同期通信をしているのだと思うのですが、ここでScriptService属性なしでも動くという理由は何でしょうか? また、結局SOAP通信をしているわけなので、ScriptService属性が何故必要なのかがどうもよくわからないのですが、ScriptService属性をつけるのとつけないのとではどう違うのでしょうか?参考サイトなどあれば教えていただければありがたいです。 あと、参考までにウェブサービスを外部に提供するとして、REST版とSOAP版はいいとして、ScriptService属性のついたのはなんて呼べばいいのでしょう。一般的な名前とかあるんでしょうか? よろしくお願いします。 | ||||||||
|
投稿日時: 2007-06-08 12:37
ASP.NET Ajax Extension のバージョンはいくつですか?
Atlas の頃は ScriptService 属性をつけなくても動いていた記憶があります。 クライアントスクリプトで WebService を呼び出しているコードはどうなっていますか? _________________ かるあ のメモ と スニペット | ||||||||
|
投稿日時: 2007-06-08 13:42
ありがとうございます。
失礼しました。ASP.NET Ajax Extensionのバージョンは1.0です。 Atlasは入れたことがありません。 WebServiceを呼び出しているコードは試験用ですのでごくシンプルで、概ね次のような感じです。(ウェブ参照名やコントロール名等は変えています。) プロジェクトにウェブ参照を追加後、 protected void Button1_Click(object sender, EventArgs e) { com.example.www.WebService ws = new com.example.www.WebService(); ResultLabel.Text = ws.Calculation(ArgLabel1.Text, ArgLabel2.Text); } ボタンを押すと、ウェブサービスに引数を2つ渡し、計算結果が返ってきたらそれをラベルに表示するという単純なものです。 これだとAJAXとかは関係ないコードだと思うのですが、このボタンとラベル類をUpdatePanelに入れて動かしてみてもちゃんと結果が返ってきます。もちろんページ全体のポストバックが発生するのではなく、部分更新になります。 これは本来あり得ない動作なのでしょうか?それともUpdatePanelだけは動くとか、そういうのがあるのでしょうか? よろしくおねがいします。 | ||||||||
|
投稿日時: 2007-06-08 13:48
書いた後に読み返していて気づいたのですが、
もしかして、この場合は、ウェブサービスへのアクセスはボタンクリックイベントの中で行われるので、サーバ側から行われることになるため、クライアントScriptからアクセスするわけではないという気がしてきました。いや、きっとそうですね。大変失礼しました。 あと、もしよろしければ、ScriptService属性のついたウェブサービスの一般的な名称があれば教えてください。 よろしくお願いします。 | ||||||||
|
投稿日時: 2007-06-08 14:34
はい、この場合サーバ側でほかのWebServiceを呼び出している(ブリッジ)だけなので、ScriptService 属性は必要ありません。
うーん、ScriptService 属性が付いていても SOAP メッセージを返します。 Microsoft AJAX Library 経由で Javascript から呼び出すときに JSON 形式でメッセージがシリアライズされるだけです。 (これに関しても ScriptMethod で XML を返す指定をしていれば XML でメッセージがシリアライズされます。) MSDN マガジンのこの記事が詳しいです。 UpdatePanel のヒントと秘訣 http://msdn.microsoft.com/msdnmag/issues/07/06/WickedCode/default.aspx?loc=jp#S5 _________________ かるあ のメモ と スニペット | ||||||||
|
投稿日時: 2007-06-08 14:59
どうもありがとうございます。
JSON形式というのは名前は知っていたのですが、ASP.NET AJAXではそれを使っているのですね。 ということであれば、サービスを公開するには、REST版、SOAP版、JSON版と名前を付けて3種類のインターフェースを用意するのがよさそうですね。 ところで、挙げていただいたページを読むと、JSONはSOAPやXMLではないというようにかかれていました。恐らく、JSONというのはフォーマットなので比較するならXML、一方SOAPはメッセージ手順なので少し意味合いが違うのかと思うのですが、そういう理解で外れてはいないのかなと勝手に理解しました。 このたびは大変勉強になりました。 どうもありがとうございました。 | ||||||||
|
投稿日時: 2007-06-08 18:55
ASP.NET AJAX の WebService ではメッセージの種類を JSON形式 でやり取りするか、XML 形式でやり取りするかは ContentType によってサーバ側で判断されます。 まえ少し考えたんだけれど、無理やり感が強かった(汗 http://karua.at.webry.info/200705/article_26.html http://karua.at.webry.info/200705/article_27.html _________________ かるあ のメモ と スニペット |
1