您的位置:首页 > 其它

在 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,核心代码如下:
[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 下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐