现在的位置: 首页 > 综合 > 正文

在 64位windows2003server 上部署 含32位COM组件的webservice

2013年12月01日 ⁄ 综合 ⁄ 共 1596字 ⁄ 字号 评论关闭

2011-05-25

 

任务描述:通过 silverlight4 在客户端选择图片,调用服务器端的 webservice 上传图片,再通过 COM组件 提取特征点,处理结果以string形式返回给客户端。

 

(注:我在做这个任务前是零基础的的SL和webservice经验,但有10年的VC开发经验,完成这个任务花了近一个月时间。)

 

花了较多时间的几个点:

1、文件的上传。

最先考虑的方式是在含SL的 asp.net 页面上调用 FileUpload 组件上传图片,再通过JS把 含路径的文件名 传给SL,结果发现SL加载不了。弄来弄去也不行,而且大多数应该显示文件全名的地方显示的都是不含路径的文件名,感觉在客户端任何通过文件名来操作文件的方式很困难。

再次想到的是把图片上传到服务器端以后,再通过远程 uri 的方式赋给SL的BitmapImage,结果也是失败。(这个方法就算成功估计图片显现也比较慢,所以没有深入。)

最后选择的方式就是通过SL调用 webservice 上传图片。参考 http://www.eggheadcafe.com/tutorials/aspnet/099b9829-514c-47f3-bce1-4149e4482d51/file-upload-control-using-silverlight.aspx,核心代码如下:

 

 

 

 

2、引用com组件的webservice的部署。

我在网上找了很久,发现讲调用的多,讲部署的少。我感觉对新手来说,部署比调用困难。打开asmx文件,里面就一句,有个含CS的文件名,让我很费解,到底这个文件要不要放在服务器上。经测试表明:放不放都可以,放要放在和asmx同目录的 app_code 文件夹下,不放要把编译好的DLL放在同目录的 bin 文件夹下。

接下来是引用COM组件的DLL,就是形如 Interop.xxx.dll 的文件要不要放在服务器上。经测试必须要放,放在bin下就好。

此时如果注册好COM组件,在32位OS上应该就没问题了。但在64位windows2003server上,提示找不到 Interop.xxx.dll 这样的组件,解决方法就是让 IIS6 支持32位程序。具体步骤为:

a、命令行输入“cscript.exe c:/inetpub/adminscripts/adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1”。

b、命令行输入“c:/Microsoft.NET/Framework/v4.0.30319/aspnet_regiis.exe -i”。

c、完成之后,在 IIS6 的 Web服务扩展 中会有一个“ASP.NET v4.0.30319 (32-bit)”,设为允许即可。

如果在COM组件中动态加载了其他DLL和数据文件,需要把它们放在 c:/windows/syswow64 下。

 

抱歉!评论已关闭.