- PR -

ScriptService属性の記述の要否

1
投稿者投稿内容
BT
ベテラン
会議室デビュー日: 2006/09/24
投稿数: 81
お住まい・勤務地: Tokyo
投稿日時: 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属性のついたのはなんて呼べばいいのでしょう。一般的な名前とかあるんでしょうか?

よろしくお願いします。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-06-08 12:37
ASP.NET Ajax Extension のバージョンはいくつですか?
Atlas の頃は ScriptService 属性をつけなくても動いていた記憶があります。

クライアントスクリプトで WebService を呼び出しているコードはどうなっていますか?

_________________
かるあ のメモスニペット
BT
ベテラン
会議室デビュー日: 2006/09/24
投稿数: 81
お住まい・勤務地: Tokyo
投稿日時: 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だけは動くとか、そういうのがあるのでしょうか?

よろしくおねがいします。
BT
ベテラン
会議室デビュー日: 2006/09/24
投稿数: 81
お住まい・勤務地: Tokyo
投稿日時: 2007-06-08 13:48
書いた後に読み返していて気づいたのですが、

もしかして、この場合は、ウェブサービスへのアクセスはボタンクリックイベントの中で行われるので、サーバ側から行われることになるため、クライアントScriptからアクセスするわけではないという気がしてきました。いや、きっとそうですね。大変失礼しました。

あと、もしよろしければ、ScriptService属性のついたウェブサービスの一般的な名称があれば教えてください。

よろしくお願いします。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-06-08 14:34
引用:

BTさんの書き込み (2007-06-08 13:48) より:

もしかして、この場合は、ウェブサービスへのアクセスはボタンクリックイベントの中で行われるので、サーバ側から行われることになるため、クライアントScriptからアクセスするわけではないという気がしてきました。いや、きっとそうですね。大変失礼しました。


はい、この場合サーバ側でほかのWebServiceを呼び出している(ブリッジ)だけなので、ScriptService 属性は必要ありません。

引用:

あと、もしよろしければ、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
_________________
かるあ のメモスニペット
BT
ベテラン
会議室デビュー日: 2006/09/24
投稿数: 81
お住まい・勤務地: Tokyo
投稿日時: 2007-06-08 14:59
どうもありがとうございます。

JSON形式というのは名前は知っていたのですが、ASP.NET AJAXではそれを使っているのですね。
ということであれば、サービスを公開するには、REST版、SOAP版、JSON版と名前を付けて3種類のインターフェースを用意するのがよさそうですね。

ところで、挙げていただいたページを読むと、JSONはSOAPやXMLではないというようにかかれていました。恐らく、JSONというのはフォーマットなので比較するならXML、一方SOAPはメッセージ手順なので少し意味合いが違うのかと思うのですが、そういう理解で外れてはいないのかなと勝手に理解しました。

このたびは大変勉強になりました。
どうもありがとうございました。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-06-08 18:55
引用:

BTさんの書き込み (2007-06-08 14:59) より:

JSON形式というのは名前は知っていたのですが、ASP.NET AJAXではそれを使っているのですね。
ということであれば、サービスを公開するには、REST版、SOAP版、JSON版と名前を付けて3種類のインターフェースを用意するのがよさそうですね。


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

スキルアップ/キャリアアップ(JOB@IT)