在 64位windows2003server 上部署 含32位COM组件的webservice
2011-05-25 11:13
162 查看
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 下。
任务描述:通过 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,核心代码如下:
[WebMethod] public string UploadFile(string strFileName, byte[] byFile) { try { if (byFile.Length > 0) { string strFilePath = "D://tmp//" + strFileName; FileStream fs = new FileStream(strFilePath, FileMode.Create, FileAccess.Write); fs.Write(byFile, 0, byFile.Length); fs.Close(); //此处是特征检测的过程... string str = nVal[0] + "," + nVal[1] + "," + nVal[2] + "," + nVal[3]; return str; } else { return "文件长度为0"; } } catch (Exception ex) { return "UploadFile exception: " + ex.ToString(); } }
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 下。
相关文章推荐
- windows2003 64位 iis6.0 运行32位web应用程序
- webservice 执行连接oracle报错32位不能运行64位系统
- 如何在window server 2008 R2里添加x86客户端打印机驱动(64位服务器下添加32位客户端打印机驱动)
- Apache http server2.4 64位绿色解压版的安装、部署、启动和使用说明
- 64位IIS7.5 上部署32位应用程序,Office组件访问失
- windows 2003 server 64 位 IIS 6下部署 32位网站
- Win2003X64位部署IIS6.0 32位 的一些问题集锦
- windows上JIRA的安装部署+破解+汉化 32位系统+64位系统
- 在64位Win2008 Server 系统上部署SSIS包遇到的问题及解决办法
- Windows2003 IIS6.0支持32位和64位两种模式的设置方法
- iis常见问题解决方案(404.3 Not Found;HTTP 错误 500.19 - Internal Server Error;32位无法在64位运行)
- 64位Windows2003,SqlServer2005,链接32位Windows2003,SqlServer2000,无法链接
- tightvncserver viewer32位/64位下载(附怎么用) v2.7.7绿色汉化版
- 64位Server 2008 R2和32位win Xp客户端之间打印机共享
- Apache http server 64位绿色解压版的安装、部署、启动和使用说明
- 关于32位和64位部署出现C#调用动态库DLL不成功的问题
- 试图加载格式不正确的程序-------32位程序在64位Win 2008 server 上运行
- 在64位IIS下,网站使用32位COM组件导致“800a01ad” ActiveX component can't create object错误的问题(转载)
- windows server 2003(64位)上利用iis6部署32位应用
- 64位IIS7.5 上部署32位应用程序,Office组件访问失