2009-06-24 22 views
1

ASP.NETを使用してサーバーに接続されたカメラから画像をキャプチャできるWebページを作成しようとしています。カメラはオリンパスで、サーバーサイドコードはカメラのSDKにあるすべての同期呼び出しにアクセスできます。
イメージをキャプチャしようとすると問題が発生します。
SDKで動作する方法は、まず画像を撮影するようにカメラに指示した後、カメラのトリガーとなるイベントにリスナーを追加して、画像のキャプチャが完了したらカメラから画像をダウンロードします。
イベントは発生しませんので、現在カメラから画像をダウンロードできません。
リスナーを関数にバインドし、カメラに画像を撮影するよう指示するコードは、ボタンのサーバー側コード内にあります。
本質的に私は、接続されているカメラの状態のように、サーバー上で変化する何かのイベントリスナーを持つことができるのだろうかと思っています。ASP.NETとのサーバーサイドイベントの混乱

+0

ポストバックにイベントハンドラをバインドしていますか?そうでない場合、イベントはハンドラには送信されません。 –

+0

これは問題かもしれませんが、実際にはポストバックではなくページロードでイベントをバインドしています。 –

答えて

1

私はあなたにこれに問題があると思います。たとえば、私はカメラが一度に1つのデスクトップアプリケーションで使用されていると仮定します。 Webアプリケーションから呼び出すことは全く異なります。それぞれの要求は別のユーザーからのものである可能性があり、既にカメラで行われていることとは関係ありません。

Windowsサービスを通じてカメラと通信することをお勧めします。このサービスは、WindowsサービスでホストされているWCFサービスを介してWebアプリケーションと通信します。カメラに画像を撮影するように指示し、イベントにアタッチします。イベントが発生すると、カメラから画像をダウンロードし、Webサービスの呼び出し元に返します。

WCFサービスでは、一度に1人のユーザーしかカメラを使用していない可能性があります。カメラがすでに使用されている場合は、コールを拒否する必要があります。

0

サーバー側のイベントキャプチャは、少しトリッキーになる可能性があります。私はこれをしてからしばらくしていましたので、私は霧の記憶から完全に書いています...

ページクラスからサーバサイドイベントにアタッチすると、クラスのライフサイクルに問題が発生します。ページが配信されると、クラスのインスタンスはもはやスコープにはないので、カメラに割り当てられたイベントハンドラはスコープ内にも存在しなくなります。これに対処するために2つの異なるメカニズムを使用しました。

A)イベントハンドラに静的メソッドを割り当てます。静的メソッドはクラスの特定のインスタンスに関連付けられておらず、ページのインスタンスがスコープ内になくなっても保持されます。

B)GLOBALクラスのメソッドを割り当てて、アプリケーション(またはセッション)_Startイベントでイベントを取得します。これにより、イベントハンドラもページクラスのスコープ外に保持されます。

これらのいずれの場合でも、イベントハンドラは、イメージが準備完了であり、ページがページ(またはハンドラ)をポーリングしたり、イメージを見つけるためにリフレッシュする必要があることを示すフラグを設定する必要があります準備が整いました。

また、カメラのAPIクラスのインスタンシエーションの範囲を調べる必要があります。クラスがページのクラスのメンバーとしてインスタンス化されている場合、ページが終了したらすぐに地球の顔が落ち、イベントは発生しません。カメラクラスは静的、グローバル、または別の独立したスレッドに生成される必要があります。

私の霧の虫が助けてくれることを願っています。がんばろう。