升级到sdk 2.2后无法调试azure解决方案。无需调试即可正常运行。可以将调试器附加到正在运行的模拟器

时间:2014-01-10 11:37:03

标签: azure visual-studio-2013 visual-studio-debugging

我有一个有两个角色的云解决方案:1个Web角色,1个角色。该解决方案最近已从sdk 2.1升级,其工作正常。

如果我在没有调试的情况下运行解决方案,例如Ctrl-F5,模拟器将启动,角色将根据需要运行。我甚至可以将调试器附加到正在运行的角色,尽管我已经错过了所有角色初始化。

如果我运行调试,例如F5,模拟器启动;工作者角色陷入“角色状态繁忙”,Web角色陷入“角色不健康”,视觉工作室变得反应迟钝,需要任务管理器杀死。在VS中,较低RHS中的部署动画一直在运行。即使我注释掉RoleEntryPoint的所有OnStart和Run覆盖,也会发生同样的情况。无论应用程序生命周期有多早,我都无法触及任何断点,因此我非常确定它是模拟器基础架构/调试器问题。

我目前正在运行程序集绑定登录,并没有注意到任何异常。我检查并重新检查了所有项目中的sdk引用,并且所有依赖项都已升级。

如果我运行调试并启用了角色诊断,即使其他所有内容都被冻结,我也会将与配置更新相关的条目添加到输出中。 e.g:

    [Diagnostics]: Checking for configuration updates 10/01/2014 

我正在寻找新的调查线,已经耗尽了我能想到的一切。顺便说一句,这不是特定于机器的,我在几台机器上进行了测试,它们都表现出这种行为。

编辑:我应该注意,即使使用2.2 sdk,其他云解决方案也可以调试。

更新:我在日志中收到以下内容:

<Log>
    <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
    <System>
        <Provider Name="Application Hang"/>
        <EventID Qualifiers="0">1002</EventID>
        <Level>2</Level>
        <Task>101</Task>
        <Keywords>0x80000000000000</Keywords>
        <TimeCreated SystemTime="2014-01-17T18:53:34.000000000Z"/>
        <EventRecordID>1216077</EventRecordID>
        <Channel>Application</Channel>
        <Computer>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</Computer>
        <Security/>
    </System>
    <EventData>
        <Data>devenv.exe</Data>
        <Data>12.0.21005.1</Data>
        <Data>2910</Data>
        <Data>01cf13b4114dc59b</Data>
        <Data>4294967295</Data>
        <Data>C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe</Data>
        <Data>a94194c4-7fa8-11e3-bed7-001e4fea6057</Data>
        <Data/>
        <Data/>
        <Binary>54006F00700020006C006500760065006C002000770069006E0064006F0077002000690073002000690064006C00650000000000</Binary>
    </EventData>
</Event>
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
    <Provider Name="ASP.NET 4.0.30319.0"/>
    <EventID Qualifiers="49152">1325</EventID>
    <Level>2</Level>
    <Task>0</Task>
    <Keywords>0x80000000000000</Keywords>
    <TimeCreated SystemTime="2014-01-17T18:56:06.000000000Z"/>
    <EventRecordID>1216080</EventRecordID>
    <Channel>Application</Channel>
    <Computer>xxxxxxxxxxxxxxxxxxxxxxxxxxx</Computer>
    <Security/>
</System>
<EventData>
    <Data>Failed to initialize the AppDomain:/LM/W3SVC/6/ROOTException: System.SystemExceptionMessage: Failed to create AppDomain.StackTrace:    at System.Web.Hosting.ApplicationManager.CreateAppDomainWithHostingEnvironment(String appId, IApplicationHost appHost, HostingEnvironmentParameters hostingParameters)   at System.Web.Hosting.ApplicationManager.CreateAppDomainWithHostingEnvironmentAndReportErrors(String appId, IApplicationHost appHost, HostingEnvironmentParameters hostingParameters)InnerException: System.Runtime.InteropServices.COMExceptionMessage: Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))StackTrace:    at System.Security.Policy.PEFileEvidenceFactory.GetLocationEvidence(SafePEFileHandle peFile, SecurityZone&amp; zone, StringHandleOnStack retUrl)   at System.Security.Policy.PEFileEvidenceFactory.GenerateLocationEvidence()   at System.Security.Policy.PEFileEvidenceFactory.GenerateEvidence(Type evidenceType)   at System.Security.Policy.AssemblyEvidenceFactory.GenerateEvidence(Type evidenceType)   at System.Security.Policy.Evidence.GenerateHostEvidence(Type type, Boolean hostCanGenerate)   at System.Security.Policy.Evidence.GetHostEvidenceNoLock(Type type)   at System.Security.Policy.Evidence.GetHostEvidence(Type type, Boolean markDelayEvaluatedEvidenceUsed)   at System.Security.Policy.AppDomainEvidenceFactory.GenerateEvidence(Type evidenceType)   at System.Security.Policy.Evidence.GenerateHostEvidence(Type type, Boolean hostCanGenerate)   at System.Security.Policy.Evidence.GetHostEvidenceNoLock(Type type)   at System.Security.Policy.Evidence.GetHostEvidence(Type type, Boolean markDelayEvaluatedEvidenceUsed)   at System.Security.Policy.Evidence.GetHostEvidence[T]()   at System.Web.Hosting.ApplicationManager.GetDefaultDomainIdentity()   at System.Web.Hosting.ApplicationManager.CreateAppDomainWithHostingEnvironment(String appId, IApplicationHost appHost, HostingEnvironmentParameters hostingParameters)</Data>
</EventData>
</Event>
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
    <Provider Name="ASP.NET 4.0.30319.0"/>
    <EventID Qualifiers="49152">1325</EventID>
    <Level>2</Level>
    <Task>0</Task>
    <Keywords>0x80000000000000</Keywords>
    <TimeCreated SystemTime="2014-01-17T18:56:06.000000000Z"/>
    <EventRecordID>1216080</EventRecordID>
    <Channel>Application</Channel>
    <Computer>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</Computer>
    <Security/>
</System>
<EventData>
    <Data>Failed to initialize the AppDomain:/LM/W3SVC/6/ROOTException: System.SystemExceptionMessage: Failed to create AppDomain.StackTrace:    at System.Web.Hosting.ApplicationManager.CreateAppDomainWithHostingEnvironment(String appId, IApplicationHost appHost, HostingEnvironmentParameters hostingParameters)   at System.Web.Hosting.ApplicationManager.CreateAppDomainWithHostingEnvironmentAndReportErrors(String appId, IApplicationHost appHost, HostingEnvironmentParameters hostingParameters)InnerException: System.Runtime.InteropServices.COMExceptionMessage: Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))StackTrace:    at System.Security.Policy.PEFileEvidenceFactory.GetLocationEvidence(SafePEFileHandle peFile, SecurityZone&amp; zone, StringHandleOnStack retUrl)   at System.Security.Policy.PEFileEvidenceFactory.GenerateLocationEvidence()   at System.Security.Policy.PEFileEvidenceFactory.GenerateEvidence(Type evidenceType)   at System.Security.Policy.AssemblyEvidenceFactory.GenerateEvidence(Type evidenceType)   at System.Security.Policy.Evidence.GenerateHostEvidence(Type type, Boolean hostCanGenerate)   at System.Security.Policy.Evidence.GetHostEvidenceNoLock(Type type)   at System.Security.Policy.Evidence.GetHostEvidence(Type type, Boolean markDelayEvaluatedEvidenceUsed)   at System.Security.Policy.AppDomainEvidenceFactory.GenerateEvidence(Type evidenceType)   at System.Security.Policy.Evidence.GenerateHostEvidence(Type type, Boolean hostCanGenerate)   at System.Security.Policy.Evidence.GetHostEvidenceNoLock(Type type)   at System.Security.Policy.Evidence.GetHostEvidence(Type type, Boolean markDelayEvaluatedEvidenceUsed)   at System.Security.Policy.Evidence.GetHostEvidence[T]()   at System.Web.Hosting.ApplicationManager.GetDefaultDomainIdentity()   at System.Web.Hosting.ApplicationManager.CreateAppDomainWithHostingEnvironment(String appId, IApplicationHost appHost, HostingEnvironmentParameters hostingParameters)</Data>
</EventData>
</Event>
</Log>

6 个答案:

答案 0 :(得分:3)

我们的项目存在同样的问题。微软错误报告在这里:

https://connect.microsoft.com/VisualStudio/feedback/details/817341/vs-debugger-cannot-attach-to-azurewebrole-with-more-then-one-iis-endpointbinding-when-using-iis-reproducable#

在这个链接上还有一个(脏)方法来解决这个问题。我们希望MS能尽快解决这个问题。

答案 1 :(得分:2)

在尝试将调试器附加到Azure模拟器时,我一直挂起Visual Studio。这是在项目的SDK /开发环境升级之后。模拟器报告“角色状态不健康”,我不得不杀死并重新启动Visual Studio。原来问题是因为ServiceConfiguration包含:

<ServiceConfiguration osFamily="1">

我正在运行在Windows 8中运行的Azure模拟器和Visual Studio

更改为

<ServiceConfiguration osFamily="3">

为我解决了这个问题。

答案 2 :(得分:1)

我不得不卸载SDK 2.2和所有以前版本的SDK,然后重新安装2.2,一切正常。

答案 3 :(得分:1)

我仍然在研究原因和方法,但我已取得进展;我在现有解决方案中添加了一个新的云项目,并将现有角色添加到该项目中 - 我将旧的云项目留在原地以供参考。新的云项目是可调试的,所以现在我可以调查cdsef和cscfg的差异。

编辑:不幸的是我曾经略微跳过枪。新创建的云项目使用IIS Express,在将其切换到IIS时再次失败。

编辑:通过删除除了一个配置的端点之外的所有端点(最初只有4个)并且只留下一个http / 80我可以调试,所以问题似乎是ssl或内部端点相关。

答案 4 :(得分:1)

更新到VS 2013 Update 2RC并安装Azure 2.3 SDK已解决此问题。 (我还没有将项目升级到2.3)

答案 5 :(得分:1)

我的情况非常类似于此。我有一个使用osFamily =“1”的Visual Studio 2010 Azure项目。在我获得Visual Studio 2013之后,我为它安装了最新的Azure SDK,现在它是SDK 2.3。我在Visual Studio 2013中打开了项目并完成了转换。

当我从Visual Studio 2013 运行项目而没有调试时,它将成功启动。当我尝试在调试模式(F5)下运行时,它只是试图启动计算模拟器。我最初没有更改osFamily设置,但后来我将其更改为正确的osFamily =“4”并且没有帮助。看看模拟器日志,很多东西都类似于黄疸的帖子。我的角色状态不健康开始了。它会做一些其他的事情,然后陷入无休止的循环“[诊断]:检查配置更新”。

最终为我修复的是将模拟器设置更改为使用“使用模拟器快速”。正如this article by Microsoft中所述,Emulator Express从Azure SDK 2.1开始出现,是2.3及更高版本的默认设置。但是,如果您从旧项目转换,那么它将设置保持为“使用完整模拟器”,这也需要完整的IIS。 Emulator Express使用IIS Express。我一开始以为可能只是对IIS Express的改变才产生了不同,但我发现黄疸最初只是IIS Express,所以我认为是Emulator Express的帮助。不确定每个人是否可以使用Emulator Express而不是Full Emulator,但它可以为我工作。

Emulator Settings