2011-08-24 24 views
1

我有一个使用WCF RIA Services并托管在Azure中的Silverlight应用程序。在Azure中托管的WCF RIA Services应用程序的Web应用中引用64位dll

的Web应用程序引用微软Z3 DLL:

如果我引用这个dll的32位版本,天青不能,因为它需要64位版本的主机了。 如果我参考64位版本,RIA服务将不会编译。

要么我需要找到在Azure中使用32位的dll的一种方式,或者我需要找到一种方式来引用的RIA服务的63bit DLL。

任何有关最佳方法的提示和方法?

感谢

山姆

回答

0

有一个努力使Z3在Azure上可用于其他一般web服务。这是积极的发展,但它还没有生活。我们预计很多其他Web服务也会使用此功能,这就是为什么我会对您的服务接口要求非常感兴趣。你需要一个增量式的高性能接口还是一个简单的文本文件接口,足以满足你的应用需求?

+0

Hi @Christoph 您是否已经到了Z3托管于Azure的舞台?您是否必须在Azure服务器上安装Z3 msi才能使其运行?另外,Z3 msi是否注册了所有的COM组件?我在尝试使Azure中加载Microsoft.z3.dll时遇到了很多麻烦,并试图通过各种方式使其能够访问z3.dll。 干杯 – Sam

1

,我想我会很快分享我的做法的情况下,没有人需要再做一次或类似的东西,因为这些问题会共同在Azure中的其他本地C++库。

的问题是有很多事情要做:Azure中不具有Z3所需要的所有VC++运行时动态链接库; Z3的安装不包括它的其他依赖项;如果解决方案或bin文件夹中存在任何64位dll,Silverlight RIA Services无法编译; Azure没有运行Z3 dll的32位版本; Azure的不具有F#运行等。

这是我如何得到它的工作:

  1. 抽象出来调用Z3(在我的情况下,代码的接口,具有XxxAnalyzerCommon的IXxxAnalyzer接口.dll)

  2. 不要将此接口的具体F#实现直接添加到解决方案中,作为参考,内容或资源。

  3. 相反,使用.NET压缩库包:

    a. XxxAnalyzer64.dll (64bit version of the F# implementation of IXxxAnalyzer) 
    
    b. XxxAnalyzerCommon.dll 
    
    c. FSharp.Core.dll 
    
    d. FSharp.PowerPack.dll 
    
    e. Microsoft.Z3.dll (64bit version) 
    
  4. 添加拉链作为内容的Web项目

  5. 添加VC++可再发行组件(64位)vcredist_x64.exe作为内容到网络项目

  6. 创建一个Azure启动任务,在第一次部署时以静默方式安装VC++ redist。

  7. 在你的角色配置

  8. 在启动时创建一个Azure的本地存储资源,解压压缩到本地存储(如果它尚不存在)

  9. 使用MEF(托管扩展框架)通过使用指向本地存储的DirectoryCatalog动态地导入具体的IAnalyzer - 因此该项目不需要对XxxAnalyzer64.dll有任何直接引用或依赖关系。

还有与FSharp.PowerPack.dll强烈引用FSharp.Core.dll的早期版本,我不得不使用一个大会重定向声明在web.config来解决问题。

+0

只是补充一点,我不会在我的项目中放入任何zip/exe/installables,并成为我部署的一部分。我宁愿将它们放在Blob存储中,然后使用Azure Bootstrapper(http://bootstrap.codeplex.com/)从启动任务下载/解压缩/安装。 – astaykov

0

解决此问题的一个方法是在Azure上启用32位二进制文​​件。这可以通过运行来完成:

%windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.enable32BitAppOnWin64:true 

在启动时。这可以通过在服务定义中添加一个启动任务来指定,以便在cmd脚本中运行。

相关问题