【问题标题】:Mongodb worker role throws System.IO.FileNotFoundExceptionMongodb worker 角色抛出 System.IO.FileNotFoundException
【发布时间】:2013-02-08 05:14:36
【问题描述】:

我有一个使用 mongodb 工作角色的 Azure 云项目。在本地模拟器中运行时一切正常,但是当我部署到 Azure 暂存区时,mongodb 工作人员角色卡在循环中并显示 System.IO.FileNotFoundException。我远程连接到其中一台虚拟机,查看事件查看器,发现如下错误:

发生未处理的异常。类型:System.IO.FileNotFoundException 进程 ID:1936 进程名称:WaWorkerHost 线程 ID:4 AppDomain 角色 MongoDB.WindowsAzure.MongoDBRole_IN_0 的未处理异常 例外:无法加载文件或程序集'mswacdmi,版本 = 1.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 或其之一 依赖关系。该系统找不到指定的文件。在 Microsoft.WindowsAzure.StorageClient.CloudDrive..ctor(Uri uri, StorageCredentials 凭据)在 Microsoft.WindowsAzure.StorageClient.CloudStorageAccountCloudDriveExtensions.CreateCloudDrive(CloudStorageAccount storageAccount,字符串 pageBlobUri)在 MongoDB.WindowsAzure.MongoDBRole.Utilities.GetMountedPathFromBlob(字符串 localCachePath,字符串 cloudDir,字符串 containerName,字符串 blobName, Int32 driveSize, CloudDrive& mongoDrive) 在 c:\Users\Matt\Software\AzurePrototype1\mongo-azure-master\src\MongoDB.WindowsAzure.MongoDBRole\Utilities.cs:line 78 在 MongoDB.WindowsAzure.MongoDBRole.MongoDBRole.GetMongoDataDirectory() 在 c:\Users\Matt\Software\AzurePrototype1\mongo-azure-master\src\MongoDB.WindowsAzure.MongoDBRole\MongoDBRole.cs: MongoDB.WindowsAzure.MongoDBRole.MongoDBRole.StartMongoD() 的第 255 行 在 c:\Users\Matt\Software\AzurePrototype1\mongo-azure-master\src\MongoDB.WindowsAzure.MongoDBRole\MongoDBRole.cs: MongoDB.WindowsAzure.MongoDBRole.MongoDBRole.OnStart() 的第 201 行 c:\Users\Matt\Software\AzurePrototype1\mongo-azure-master\src\MongoDB.WindowsAzure.MongoDBRole\MongoDBRole.cs:line 91 at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.InitializeRoleInternal(RoleType 角色类型枚举)在 Microsoft.WindowsAzure.ServiceRuntime.Implementation.Loader.RoleRuntimeBridge.b__0() 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext、ContextCallback 回调、对象状态、布尔值 ignoreSyncCtx) 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext、ContextCallback 回调、对象状态)在 System.Threading.ThreadHelper.ThreadStart()

为什么这在本地工作而不是在 Azure 上工作?我对装配等不太了解,但我正在学习。网上建议的一件事是检查引用程序集的属性并将“复制本地”设置为true,我已经尝试过,但仍然是同样的错误。

【问题讨论】:

    标签: mongodb azure azure-worker-roles azure-storage


    【解决方案1】:

    在您的辅助角色项目中,确保您有一个对 mswacdmi.dll 的 .NET 引用,其中属性设置为 Copy Local=true。当您发布 - RDP to your Azure role instance 以验证您部署的角色是否在 /bin 目录中具有程序集。

    还要确保您的目标是 x64 - 我在这条路径上找到了 mswacdmi.dll (Azure SDK 1.8):

    C:\Program Files\Microsoft SDKs\Windows Azure.NET SDK\2012-10\bin\runtimes\storage\cloud\x64

    【讨论】:

    • 我试过了,但还是不行:/复制本地设置为true,我还尝试将文件复制到/bin的Debug和Release文件夹中,但仍然没有。部署文件时,不会像其他库一样将文件复制到 /approot 中的虚拟机上。可能是因为我拥有的 mswacdmi.dll 版本是 1.8 版,它正在寻找 1.7 版吗?至少不应该复制文件吗?感谢您的帮助:)
    • 某些东西肯定在寻找 1.7(可能是 app.config 引用或其他程序集依赖项),因此您应该在此处找到该版本:C:\Program Files\Microsoft SDKs\Windows Azure\.NET SDK\2012-06\bin\runtimes\storage\cloud\x64 如果您有 SDK 1.7 已安装。此外,当您编译 Azure 项目时,您应该能够将 cspkg 文件更改为 .zip 并找到包含上传内容的 cssx另一个 zip 存档)到 Azure 实例。从这里,您应该能够跟踪它丢失的位置。你是如何部署这个包的?
    • 好的,停止抛出异常!我必须安装 SDK 1.7 并在它为另一个 dll 引发另一个 filenotfound 异常之后,但删除并重新添加引用修复了它。所以感谢您的帮助:) 你知道为什么引用可能会搞砸吗?
    • 它可能是来自另一个组件的依赖项 - 检查您的 MongoDBRoleapp.config。某些东西必须指向 1.7 版。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2022-01-11
    • 1970-01-01
    • 2018-03-03
    相关资源
    最近更新 更多