我知道这可能是一件非常愚蠢的事情,但我已经在谷歌上搜索了2个小时来弄清楚这个问题。
我有一个新的测试Azure应用程序,我想在Visual Studio中调试。如果我将启动项目设置为Web角色(MVC)项目,我可以在VS中遇到断点,但它不在模拟器中运行,因此我所有的Azure调用都失败。
如果我将启动项目设置为Cloud项目,则模拟器启动,然后Visual Studio结束调试,并且我的web角色永远不会启动。
我在这里错过了什么?我如何启动我的网页,仍然可以访问模拟器?
(边注. .为什么没有Visual Studio 2012标签??)
虽然这不能直接回答您的问题,但我总是确保我的项目在模拟器之外运行。如果不考虑其他因素,这将大大提高您的开发效率。
为了避免Azure调用失败的问题,你可以使用一个非常基本的做法是使用依赖注入框架(如Unity或其他),并创建一个LocalConfigurationManager
和AzureConfigurationManager
,它们都实现了一些接口,如IConfigurationManager
,然后如果你的代码需要向Azure询问实例号,或配置设置等…LocalConfigurationManager
只能返回一个硬编码的数字/设置,而真正的AzureConfigurationManager
实际上会调用Azure。
技巧是使用Web.Debug.Config和Web.Prod.Config文件(或者可能只是使用#IF DEBUG
c#预编译器语句)来根据构建配置更改实现。
我刚刚创建了一个带有MVC Web角色的Azure项目,并且我能够在控制器操作中击中断点而没有任何问题。检查:
- 你有一个WebRole.cs文件在你的MVC项目包含类派生自RoleEntryPoint?
- 在Azure项目的角色文件夹中是否有一个节点代表您的MVC项目?
- 运行Azure项目时,计算和存储模拟器图标是否显示在任务栏的通知区域中?
- 执行ServiceDefinition。csdef文件在您的Azure项目中包含一个Web角色节点的属性匹配您的MVC项目名称?
webrolename ="MvcWebRole1" vmsize="Small"
作为一个快速测试,尝试用MVC Web Role创建一个新的Azure项目,添加一个带有单个操作的控制器,该操作返回一个视图,并在其中放置一个断点。然后将你的Azure项目设置为"启动项目"。如果一切正常,您应该在调试Azure项目时遇到断点。
我卸载并重新安装了所有Azure SDK,但无济于事。
此链接
正在调试Azure:将调试器附加到IIS工作进程时出错
告诉我在哪里查找导致它失败的错误,这使我找到了这个链接:
http://social.msdn.microsoft.com/Forums/en-US/windowsazuredevelopment/thread/07fe087e-4ac3-4c4f-bd62-4fccff4afd45The ACL on the Windows Azure registry entries were not in "canonical order".
All you have to do is fix that and this error goes away.
These are the steps I took:
1.) regedit, navigate to HKLMSoftwareMicrosoftWindowsWindows Azure
2.) Right-click, choose "Permissions". You will get a warning that the
security information is incorrect and you get a button labelled "Re-Order".
Click this and the security information then shows up as normal.
3.) Follow the same steps for the Windows Azure AppFabric and Windows Azure Emulator
registry entries in the list after the Windows Azure entry.
Problem Solved!
请注意,我在HKLMSoftwareMicrosoftWindows Azure下找到了密钥,而不是在WindowsWindows Azure下。