- PR -

コールバック手法の非同期WebService コールバックメソッド内でフォームのコントロールへのアクセス方法が

投稿者投稿内容
Tanishi
会議室デビュー日: 2006/03/11
投稿数: 9
投稿日時: 2006-03-16 18:11
こんばんは。ASP.NETをC#でコーディングして、1ヶ月程度の初心者です。

コールバック手法での非同期Webサービスを研究しています。

コールバックメソッド内で、もともとのWebフォームのコントロールのアクセス方法が
わかりません。

いろいろなホームページを訪れてみたのですが3日たっても解決できず、ついに会議室に投稿してしまいました。

Webサービスは、10秒程度スレッドスリープしてから "Hello World"の文字列を返す簡単なものです。

呼び出し側は、このWebサービスと非同期で通信し、結果(Hello World)を適当なラベルコントロール上に表示したいのです。

ボタンを押したときのイベント処理として、

localhost.Service1 s = new localhost.Service1();

private void Button1_Click(object sender, System.EventArgs e)
{
System.AsyncCallback cb = new AsyncCallback(test.WebForm1.TestCallBack);

System.IAsyncResult ar = s.BeginHelloWorld(cb,s);


while(!ar.IsCompleted)
{
//なんらかの処理
}
}
としておき、コールバックメソッドを
public static void TestCallBack(System.IAsyncResult ar)
{
localhost.Service1 sr = (localhost.Service1)ar;
string result = sr.EndHelloWorld(ar);
.
.
.
?
}

としたとき、このコールバックメソッド上で、もともとのフォーム(test.WebForm1)
のラベルコントロールにアクセスする方法で悩んでいます。

教えて君で申し訳ないのですが、参考となるURLなどありましたら、
是非ともお願いします。




[ メッセージ編集済み 編集者: Tanishi 編集日時 2006-03-16 18:13 ]

[ メッセージ編集済み 編集者: Tanishi 編集日時 2006-03-16 18:15 ]
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-03-16 18:20
それはちょっと無理ですね。
もうクライアントに返してしまっているのでどう足掻いてもアクセス出来ません。

_________________
囚人のジレンマな日々
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2006-03-16 18:56
引用:

囚人さんの書き込み (2006-03-16 18:20) より:
それはちょっと無理ですね。
もうクライアントに返してしまっているのでどう足掻いてもアクセス出来ません。


コード:
while(!ar.IsCompleted) 
{ 
//なんらかの処理 
} 
} 


なんて書いてるので終わるまで待つみたいですが、
そもそも何のために非同期にしようとしてるのかよく分かりませんね…
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2006-03-16 19:03
引用:

while(!ar.IsCompleted)
{
//なんらかの処理
}



WebフォームからWebサービスを非同期で呼んで終了するまで待つ?
非同期の必要があるのでしょうか?

#かぶった

[ メッセージ編集済み 編集者: todo 編集日時 2006-03-16 19:03 ]
ゆう
常連さん
会議室デビュー日: 2003/06/27
投稿数: 45
投稿日時: 2006-03-16 19:12
引用:

コールバック手法での非同期Webサービスを研究しています。




非同期のWebサービスというと、Ajaxをよく耳にします。
言語にこだわる必要がなければ、少し調べてみてはいかがでしょうか。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-03-16 22:51
引用:

なんて書いてるので終わるまで待つみたいですが、
そもそも何のために非同期にしようとしてるのかよく分かりませんね…


あ,ほんとだ^^;
でも,待ってたとしても,非同期呼び出しの「コールバック」は別スレッドだから,非同期呼び出しを開始したリクエストのスレッドのWebフォームにアクセスするのは無理でしょうね.
#絶対無理って事はないでしょうけど.


_________________
囚人@わんくま同盟
囚人のジレンマな日々

[ メッセージ編集済み 編集者: 囚人 編集日時 2006-03-16 22:53 ]
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2006-03-17 07:32
Ajaxで実現すべきでは?

以下のサンプルが参考になるかと。

ASP.NET 1.1 Ajax (Hello World)
http://www.friendlysw.com/aspnet/Articles/Goto.aspx?id=050825-1

ASP.NET 1.1 My Ajax.NET (郵便番号から住所取得)
http://www.friendlysw.com/aspnet/Articles/Goto.aspx?id=050825-3

ASP.NET 2.0 Callback (Webサーバーから日時を取得)
http://aspspider.net/AkioKasai/Goto.aspx?id=060224-4

ASP.NET 2.0 Callback (郵便番号から住所取得)
http://aspspider.net/AkioKasai/Goto.aspx?id=060224-6

ASP.NET 2.0 Atlas Callback (Webサーバーから日時取得)
http://aspspider.net/AkioKasai/Goto.aspx?id=060309-1


_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
Tanishi
会議室デビュー日: 2006/03/11
投稿数: 9
投稿日時: 2006-03-17 10:49
たくさんのみなさまからのご返答、誠にありがとうございます!

悠さん、Accessさんのご意見どおり、Ajax研究します!

囚人さんも、ズバリ、「無理」とのご回答ありがとうございました!

なちゃ、todoさんのご指摘ごもっともです。

非同期通信の有利な面も、ボヤッとしかとらえていないので、これも勉強ですね・・・。

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