2009-06-24 154 views
1

我正在嘗試創建一個網頁,它將允許用戶從使用ASP.NET連接到服務器的攝像頭捕獲圖像。相機是奧林巴斯,服務器端代碼可以訪問相機sdk中的所有同步通話。
當我試圖捕獲圖像時出現問題。
它在SDK中的工作方式是先告訴攝像頭拍攝圖像,然後將偵聽器添加到攝像頭觸發的事件,然後在攝像頭完成捕獲圖像後開始下載圖像。
事件從未觸發,所以我目前無法從相機下載圖像。
將偵聽器綁定到函數並告訴相機拍攝圖片的代碼位於按鈕的服務器端代碼中。
基本上我想知道如何能有一個事件監聽器的東西在服務器上的變化,如所附的相機的狀態。服務器端事件與ASP.NET混淆

+0

你在回發上綁定事件處理程序嗎?如果沒有,該事件不會觸發您的處理程序。 – 2009-06-25 13:24:20

回答

1

我希望你有這個問題。例如,我敢打賭,相機一次只假設一個桌面應用程序正在使用它。從Web應用程序中調用它是非常不同的,因爲每個請求都可能來自不同的用戶,並且可能與攝像機正在進行的操作無關。

我建議您通過Windows服務與相機進行通信。該服務將通過Windows服務中託管的WCF服務與Web應用程序進行通信。它會告訴相機拍攝圖像,並將附加到該事件。事件觸發時,它會從相機下載圖像並將其返回給Web服務的調用者。

WCF服務可能必須確保一次只有一個用戶正在使用相機。如果相機已被使用,則必須拒絕該通話。

0

服務器端事件捕獲可能會有點棘手。我已經完成了這一段時間,所以我完全從我的迷霧中記錄...

從頁面類中附加到服務器端事件會引發類的生命週期問題。一旦頁面交付後,類的實例不再處於範圍內,因此無論您分配給相機的事件處理程序是否不再在範圍內。我們使用了兩種不同的機制來處理這個問題。

A)爲事件處理程序分配一個靜態方法。靜態方法不綁定到類的特定實例,並且即使在頁面實例不在作用域中後,該靜態方法也會保留。

B)在GLOBAL類中分配一個方法來捕獲應用程序(或會話)_Start事件上的事件。這將事件處理程序保持在頁面類的範圍之外。

無論是哪種情況,您的事件處理程序都需要設置一些可以全局讀取的標誌以指示圖像已準備就緒,並且您的頁面需要輪詢頁面(或處理程序)或刷新以查找圖像準備好了。

您還需要查看相機API類實例的範圍。如果該類被實例化爲頁面類的成員,那麼只要頁面完成,它就會從地球表面掉落,這樣做並不會引發事件。相機類將需要靜態,全局或衍生到另一個獨立的線程。

希望我的霧羚羊幫助。祝你好運。