這段時間忙壞了,還記得這個主題只寫了上半部分,今天抽點時間把下半段給完結吧。
該方式主要是使用了System.EnterpriseServices這個命名空間,通過它創建了一個COM+ STA thread的池(pool),並封裝一個調用STA的委託,這樣我寫的方法就可以在STA線程上同步。
回到我之前寫的程序框架(結構)中,就是在類庫項目中使用這個封裝好的STAInvoker。上層從Web服務的方法中調用類庫項目中的某方法,這個方法中要使用單線程的ActiveX控件,第一次初始化時倒還可以通過,之後返回Web服務層再往類庫項目中調用時,嘿嘿,現在就可以繼續使用這個ActivX控件,再也不“被異常”了(“被XXX”現在不是很流行麼),“COM對象與其基礎RCW分開後不能再使用該對象”這個就一去不復返了。
不過,我在項目中使用時,還是遇到了另外的情況(現在的例子中使用的是WebBrowser控件,我沒試過):使用該ActiveX控件的讀取方法時(比如查詢呀什麼的)沒有問題,正常;但如果使用有寫入操作的方法時(比如在其中生成某些數據),就會報錯,看似爲權限的問題,但不管對文件夾加入了ASPNET帳戶也好IUSR帳戶也好,一直都無法通過。所以要根據情況酌情使用。
我作的示例代碼已上傳至:
http://download.csdn.net/source/1865807