- - PR -
ウェブサービスでのサーバからクライエントへのイベントコールバック
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-02-15 04:05
C#はそれなり、ウェブサービスはいじり始めたばかりの初心者です。
サーバ側でWebMethod(たとえばHelloWorld)を定義すると、クライエント側からHelloWorld と HelloWorldAsync が呼べるようになり、HelloWorldCompleted イベントをリッスン出来るところまでわかりました。 - これでは1回のHelloWorldAsync呼び出しにつきCompletedイベントが1回起こることになりますが、イベントを任意の回数発生させる方法はありますか(Completedイベントで無くても良いので)? Completed の時だけでなく、途中結果をアップデート出来る様な処理をしたいのですが、可能なのでしょうか? - HelloWorldは string だけ返しますが、より多くのデータを返すにはどうするのが適当でしょうか?public properties を含んだクラスを返すようにしたところ、ウェブプロキシの中にデータが入っていません。public fields を含んだクラスを返すと、一応動作はするのですが public field なので当然 FxCop に怒られてしまいます。今のところ一番いい(?)アイデアは自前のXML生成関数を作って string として返してしまおう、というものですが…。なにか他にいい方法はありますか? | ||||||||
|
投稿日時: 2006-02-15 08:42
getterもsetterもあるプロパティならいけると思います。 #code引用していたのを修正 _________________ 囚人のジレンマな日々 [ メッセージ編集済み 編集者: 囚人 編集日時 2006-02-16 09:39 ] | ||||||||
|
投稿日時: 2006-02-16 03:43
囚人さん、どうも有り難うございました。
まさにその通りで、getterしかなかったところにsetterを加えたら出来るようになりました。 以下の質問については、どうでしょうか?webで「一回の呼び出しで複数回結果が返ってくる」を実現するのは無理なのでしょうか? - これでは1回のHelloWorldAsync呼び出しにつきCompletedイベントが1回起こることになりますが、イベントを任意の回数発生させる方法はありますか(Completedイベントで無くても良いので)? Completed の時だけでなく、途中結果をアップデート出来る様な処理をしたいのですが、可能なのでしょうか? それから、出来ればコード引用を止めて頂けると横の長さが長すぎず、読みやすくなると思うのですが... ^^; | ||||||||
|
投稿日時: 2006-02-16 09:38
多分ない…かな。 非同期呼び出しを実現しているのは、クライアントのプロキシの方だと思います。 途中結果を知りたいような実装にするには、Webサービスメソッドを分割するしかないのかな。
あ、間違った… _________________ 囚人のジレンマな日々 | ||||||||
|
投稿日時: 2006-02-16 10:39
囚人さん、またまた有り難うございます。
つまり、プロキシが別スレッドを作って、別スレッドの方でサーバに問い合わせと返答待ちをして、返答が来たらCompletedイベントを呼び出すということですか? 帰ってくる結果の数が予め分からない場合は不可能だと言うことですね…きっと。 Windows Communication Foundation を使うと実現出来る様になるのでしょうか?英語のドキュメントは充実しているようなので、そちらをあたってみます。 | ||||||||
|
投稿日時: 2006-02-16 11:01
と単純に考えているんですけどね。詳細な仕組みの資料が見つからないです。
どうなんでしょう。無理なような気がしますが、期待したいですね。 何か成果があれば、フィードバックお待ちしています^^; _________________ 囚人のジレンマな日々 | ||||||||
|
投稿日時: 2006-02-22 07:34
と言うわけで、たいした成果ではないのですがフィードバックです。まだ仕事の合間を縫ってドキュメントを読んでみただけの状態です。 イベントコールバックという概念そのものをより広く使えるように、などということはしないようです。ただし、.NETアプリ同士のコミュニケーションのためには.NET Remotingを使っても良いので、そのケースではもちろんイベントを使えます。 EndPointという概念を使ってやり取りするようで、コミュニケーションは単方向。コールバックのようなものが必要ならばクライエント側で呼び戻してもらうためのサービスをホストする必要があるようです。 こんなもんでいかかでしょう? |
1