9

我在让 SSL 在 Development Fabric 中工作时遇到了问题。我正在使用 Visual Studio 2012 Ultimate 和 2012 年 10 月 Azure SDK for .NET 运行 Windows 8 Pro 的全新安装。没有安装 IIS8,只有 IIS Express,它声称支持 HTTPS,所以我希望这不是问题。

以管理员身份运行 VS 12,我创建了一个空白 VS 解决方案,添加了一个新的 (.NET 4.5) 云服务和一个新的 ASP.NET MVC 4 Internet Web 应用程序项目,然后按 F5。一切正常。然后,当我向 Web 角色添加 SSL 证书并将 HTTP 端点(端口 80)替换为 HTTPS 端点(端口 443,带有证书)时,按 F5 会产生以下错误消息:

适用于 Microsoft Visual Studio 的 Windows Azure 工具

将调试器附加到角色实例“deployment18(32).WindowsAzureCloudService.Mvc4WebRole_IN_0”时出错,进程 ID:4892。无法附加。访问被拒绝。

请注意,最后一部分(“访问被拒绝”)有几个变体,特别令人愉快的是“灾难性故障”。:)

VS 输出窗口(“常规”输出)中的唯一消息是:

Windows Azure 工具:警告:将角色“Mvc4WebRole”中的专用端口 443 重新映射到 444,以避免在模拟期间发生冲突。

Compute Emulator UI 没有多大帮助;就在实例消失之前,这是我始终如一地获得的唯一控制台输出(有时会出现其他消息,但偶尔会每隔几次运行一次;我不确定如何捕获这些消息):

[面料] 角色实例:deployment18(33).WindowsAzureCloudService.Mvc4WebRole.0

[面料] 角色状态未知

[面料] 角色状态暂停

[面料] 角色状态忙碌

[面料] 角色状态不健康

[面料] 角色状态已停止

该证书是从 CA 获得的,并作为具有私钥、扩展属性的 .pfx 正确导入本地机器/个人/证书存储,并标记为可导出,物有所值。

当我尝试将服务发布到 Azure 时,我收到一个关于数据库连接字符串的构建(验证)警告(我认为这无关紧要):

连接字符串“DefaultConnection”在项目“Mvc4WebRole”中使用本地数据库“(LocalDb)\v11.0”。当您在 Windows Azure 中运行此应用程序时,此连接字符串将不起作用。要访问不同的数据库,您应该更新 web.config 文件中的连接字符串。

可能更重要的是,部署实际上失败并在 Windows Azure 活动日志窗口中显示以下历史记录:

上午 9:00:25 - 警告:有包验证警告。

上午 9:00:25 - 为 WindowsAzureCloudService 准备部署 - 2013 年 1 月 3 日上午 8:59:55,订阅 ID 为“<...>”,使用服务管理 URL 'https://management.core.windows.net/ '...

上午 9:00:25 - 连接中...

9:00:26 AM - 对象引用未设置为对象的实例。

9:00:26 AM - 部署失败并出现致命错误

有人可以帮我解决这个问题吗?我已经重新启动了几次。;)

提前致谢!

编辑(1 月 3 日,下午 4:44):我有一些想法可能会帮助我取得进步,但有些想法非常激进,因此我们将不胜感激:

  • 有没有办法将 Compute Emulator (Dev Fabric) 的所有输出捕获到日志文件中,以便我查看它?(来自我的服务的 System.Diagnostic.Trace 调用无济于事,因为使用 HTTPS 时我什至没有达到 RoleEntryPoint!) 我想通了;见下一次编辑。
  • Azure 部署期间的空指针异常让我担心。尝试重新安装 Azure SDK 是否值得,如果是,我应该如何进行全新安装?
  • 当切换到使用完整的 IIS 作为模拟器时,有没有人看到这种问题消失了?(这似乎不太可能,因为 IIS 与 IIS Express 应该与 Azure 部署无关。)

编辑(1 月 4 日,上午 10:15):坏消息:我尝试了授予对证书的读取访问权限的建议,但对我的情况没有帮助。好消息:我设法在 Compute Emulator UI 关闭之前捕获了其中一条零星消息;这是一些诊断中的一些信息。本身并没有帮助,但它揭示了 Development Fabric 存储其临时文件的位置:

[诊断] 信息:C:\Users\Lars\AppData\Local\dftmp\Resources\0005155d-4592-40f4-812e-18793b26576c\directory\DiagnosticStore\Monitor

每次部署都会重新创建 GUID 部分,并在部署消失时将其删除(在我的情况下总是如此)。但是在父目录 ('dftmp') 中,我在新部署期间监视了一些有用的目录:DevFCLogs、DFAgentLogs 和 IISConfiguratorLogs。我想这回答了我昨天的第一个问题!:)

DFAgentLogs\DFAgent.log:(41KB)没有有用的信息。一堆“读取管道失败”消息和获取角色/部署实例 ID 的失败,我认为这只是噪音。

DevFCLogs\DevFabric--2013.01.04--<...>.log: (510 KB)没有有用的信息。我浏览了文件,还搜索了“错误”、“失败”、“未找到”、“证书”和“Mvc4WebRole_IN_0”;这些都没有显示出正在发生的事情的任何迹象。

IISConfiguratorLogs\IISConfigurator.log:(6 KB)现在我们正在取得进展!:) 有人能告诉我这是什么意思吗?(与此同时,我不再寻找 ILSpy 了……好玩……)

IISConfigurator 信息:0 : [00006356:00000005, 2013/01/04 16:07:08.915] 使用 IIS Express appdomain

(...)

IISConfigurator 信息:0 : [00006356:00000005, 2013/01/04 16:07:08.936] 添加绑定 127.255.0.0:444: 到站点部署 18(40).WindowsAzureCloudService.Mvc4WebRole_IN_0_Web

IISConfigurator 信息:0 : [00006356:00000005, 2013/01/04 16:07:10.484] 捕获异常

IISConfigurator 信息:0:[00006356:00000005, 2013/01/04 16:07:10.487] 异常:System.Runtime.InteropServices.COMException (0x800401F3):无效的类字符串(来自 HRESULT 的异常:0x800401F3 (CO_E_CLASSSTRING))

服务器堆栈跟踪:

在 Microsoft.Web.Administration.Interop.IAppHostProperty.get_Value()

在 Microsoft.Web.Administration.ConfigurationElement.GetPropertyValue(IAppHostProperty 属性)

在 Microsoft.Web.Administration.Binding.get_CertificateHash()

在 Microsoft.Web.Administration.BindingCollection.Add(绑定绑定)

在 Microsoft.WindowsAzure.ServiceRuntime.IISConfigurator.WasManager.DeploySite(字符串 roleId,WASite roleSite,字符串 appPoolName,字符串 sitePath,字符串 iisLogsRootFolder,字符串 failedRequestLogsRootFolder,列表1 bindings, List1 协议,FileManager 文件管理器,WAAppPool defaultAppPoolSettings,字符串 roleGuid,字符串和 appPoolSid,列表`1 appPoolsAdded,字符串配置路径)

编辑(1 月 4 日,上午 11 点): ILSpy 没有多大帮助;在尝试获取证书的哈希以设置绑定(我们也知道)时,在互操作点抛出异常(我们已经知道)。有谁知道需要注册什么 COM 对象才能获得 Microsoft.Web.Administration 中绑定的证书哈希?或者我如何拦截互操作调用以找出答案?如果您能首先告诉我为什么会发生这种情况,则可以加分。:)

4

2 回答 2

13

我在两台电脑上遇到过类似的问题。在这两种情况下,安装 IIS 都解决了问题

只需安装 IIS(通过添加/删除 Windows 组件)似乎就足够了。您无需开始使用它。安装发生了一些变化,之后我的 IIS Express 再次开始使用 Visual Studio 中的 HTTPS。

在 MSDN Social 上有一个关于类似问题的讨论: http ://social.msdn.microsoft.com/Forums/nl-NL/windowsazuredevelopment/thread/ad362016-16f6-459a-8022-9307aa5f910e 这个问题也在微软连接: https ://connect.microsoft.com/VisualStudio/feedback/details/758533

在我的情况下,日志文件中的错误是:

IISConfigurator 信息:0 : [00007644:00000007, 2013.01.17 00:39:18.523] 异常:System.Runtime.InteropServices.COMException (0x800401F3):无效的类字符串(来自 HRESULT 的异常:0x800401F3 (CO_E_CLASSSTRING))

我从 C:\Users\\AppData\Local\dftmp\IISConfiguratorLogs 目录中找到了日志文件。

于 2013-01-17T01:05:09.747 回答
11

当使用 SSL 的私钥证书在本地运行时,您需要向用户提供正在运行的仿真器应用程序可以访问私钥。打开 mmc.exe 并添加证书 >> 本地计算机管理单元以查看您的证书。右键单击证书,然后单击所有任务>>管理私钥-然后添加至少具有读取权限的 IUSR 和网络服务。

要部署到 Azure,您需要将证书上传到云服务并确保证书对域有效。

按照http://www.microsoft.com/en-us/download/details.aspx?id=35448中的步骤 11 操作。从这个SO 帖子

于 2013-01-04T02:26:27.623 回答