这段时间忙坏了,还记得这个主题只写了上半部分,今天抽点时间把下半段给完结吧。
该方式主要是使用了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