2009-06-24 9 views
1

Je tente de créer une page Web qui permettra à un utilisateur de capturer des images à partir d'une caméra connectée au serveur à l'aide d'ASP.NET. La caméra est un olympus et le code côté serveur a accès à tous les appels synchrones qui se trouvent dans le sdk de la caméra.
Le problème se pose lorsque j'essaie de capturer une image. Le fonctionnement du SDK consiste à dire à l'appareil photo de prendre l'image, puis d'ajouter un écouteur à un événement déclenché par la caméra pour commencer à télécharger l'image depuis la caméra une fois la capture de l'image terminée. .
L'événement n'est jamais déclenché, je ne peux donc pas télécharger l'image de l'appareil photo.
Le code qui lie l'écouteur à une fonction et indique à la caméra de prendre la photo se trouve dans le code côté serveur d'un bouton.
Essentiellement je me demande comment on pourrait avoir un écouteur d'événement pour quelque chose qui change sur le serveur, comme l'état de la caméra qui est attachée.Confusion d'événement côté serveur avec ASP.NET

+0

Liez-vous le gestionnaire d'événements en publication? Sinon, l'événement ne se déclenchera pas pour votre gestionnaire. –

+0

Cela pourrait être le problème, je lie effectivement l'événement sur le chargement de la page plutôt que sur la publication, je vais donner un coup de feu. –

Répondre

1

Je m'attendrais à ce que vous ayez des problèmes avec ceci. Par exemple, je parie que la caméra suppose qu'elle est utilisée par une seule application de bureau à la fois. L'appeler à partir d'une application Web est assez différent, car chaque requête peut provenir d'un utilisateur différent et ne pas être en rapport avec ce qui se passe déjà avec la caméra.

Je vous recommande de communiquer avec l'appareil photo via un service Windows. Le service communiquerait avec l'application Web via un service WCF hébergé dans le service Windows. Il dirait à la caméra de prendre l'image, et s'attacherait à l'événement. Lorsque l'événement se déclenche, il télécharge l'image de la caméra et la renvoie à l'appelant du service Web.

Le service WCF devrait probablement s'assurer qu'un seul utilisateur utilise la caméra à la fois. Si la caméra est déjà utilisée, elle doit rejeter l'appel.

0

Les captures d'événements côté serveur peuvent être un peu compliquées. Cela fait un moment que je l'ai fait, donc j'écris complètement de ma mémoire brouillée ...

La connexion à un événement côté serveur à partir d'une classe de page introduit un problème avec le cycle de vie de la classe. Une fois la page livrée, l'instance de la classe n'est plus dans la portée de sorte que tout gestionnaire d'événements que vous avez affecté à la caméra n'est plus dans la portée non plus. Nous avons utilisé deux mécanismes différents pour gérer cela.

A) Attribuez une méthode statique au gestionnaire d'événements. Une méthode statique n'est pas liée à une instance spécifique d'une classe et persistera même si l'instance de la page n'est plus dans la portée. B12) Affecter une méthode dans la classe GLOBAL pour capturer l'événement sur l'événement _Start d'application (ou de session). Cela maintient également le gestionnaire d'événements en dehors de la portée de la classe de page. Dans les deux cas, vos gestionnaires d'événements devront définir un indicateur qui peut être lu globalement pour indiquer que l'image est prête et que votre page devra interroger une page (ou un gestionnaire) ou rafraîchir pour trouver l'image. est prêt.

Vous aurez également besoin de regarder la portée de l'instanciation de la classe API de la caméra. Si la classe est instanciée en tant que membre de la classe de la page, elle tombe de la surface de la terre dès que la page est terminée et que l'événement ne sera pas levé. La classe de caméra devra être statique, globale ou engendrée par un autre thread indépendant.

J'espère que mes ramplings brumeux aident. Bonne chance.

Questions connexes