Azure云服务Web角色网页无法加载

Jam*_*tti 2 asp.net deployment iis azure azure-cloud-services

这很可能是一个非常长的帖子,试图完全解释我的Azure云服务的部署方式以及我已经尝试解决这个问题,所以请提前道歉并表示感谢.

Framwork:4.5.1
Azure SDK:2.5
Visual Studio:2013 Update 4

问题:

在我尝试加载网页时发布我的Azure Cloud Service时,浏览器将持续加载,从不显示页面或任何错误(没有Web错误代码或.Net错误).无论我是在远程IP还是从-cloudservicename-.cloudapp.net远程登录到Azure本身的VM之后尝试加载网站,这都是相同的行为.部署到Azure时,发布和调试配置都是这种情况.

但是,当在Azure模拟器上本地运行时,应用程序在调试和发布模式下都能正常运行.我的云和本地.cscfg文件之间没有区别,除了VPN配置的NetworkConfiguration部分.

Cloud Service从Visual Studio部署没有错误,我可以RDP到VM并打开IIS等没问题,网站配置和证书看起来很好.

我的应用程序

我的Azure云服务由两个角色组成,一个是托管网站的Web角色,另一个是运行各种后台作业的Worker角色.

这个项目已经有一段时间了,我过去已经从不同的机器上发布了几次迭代.这是我第一次从新的Windows 8.1笔记本电脑上发布,虽然这不应该有所作为.自上一版本以来,配置发生了很小的变化(一个连接字符串添加到角色中).唯一重大的变化是我升级到VS2013更新4(来自更新3)和Azure SDK 2.5(来自2.4).

如果需要,我可以发布配置文件,但是在部署确实有效的情况下,一切似乎都可以.

调查:

我已经采取了许多步骤来尝试调查并解决问题.

RDP到服务器上没有显示任何移民问题,事件日志中没有IIS条目,我自己的日志记录似乎没有任何有用的东西(稍后将详细介绍).

我还启用了Azure诊断程序,但查看返回的日志,没有任何内容突然出现在我身上,因为它是手头问题的日志.

我尝试的下一件事是将远程调试器附加到Azure VM,这可以工作,我可以调试项目.我在Global.asax.vb中处理的所有方法上都设置了断点,包括:

Application_BeginRequest
Application_AuthenticateRequest
Application_Error
Run Code Online (Sandbox Code Playgroud)

在请求页面Application_BeginRequest被立即命中,然后按Application_AuthenticateRequest预期命中.然而,遵循代码通过Application_AuthenticateRequest导致一些奇怪的行为.

在这段代码中我验证了一个FormsAuthenticationCookie,如果发现它将被设置HttpContext.Current.UserThread.CurrentPrincipal.在这种情况下,cookie没有任何用户没有登录,这意味着该Application_AuthenticateRequest方法完成.此时我可以继续逐步完成.Net框架代码并可以看到成功完成HttpApplication.ExecuteStep.

此时,我希望master_Page_PreLoadMasterPage或我的自定义实现中的方法或其他一个预加载事件Page可以执行,但是没有一个被命中.

在调试中离开进程几分钟后最终Application_Error被命中,这意味着我的日志记录会写出显然导致错误的异常.这很少发生,但是当它发生时我发现了两个不同的错误:


我的日志中的第一个错误:

ErrorCode:SubStatus:暂时失败.请稍后重试.(一个或多个指定的缓存服务器不可用,这可能是由繁忙的网络或服务器引起的.对于内部部署缓存集群,还要验证以下条件.确保已为此客户端帐户授予安全权限,并检查AppFabric允许缓存服务通过所有缓存主机上的防火墙.服务器上的MaxBufferSize也必须大于或等于从客户端发送的序列化对象大小.).附加信息:客户端尝试与服务器通信:net.tcp:// rolename.here:24233 .. GUID:9f85d178-968f-4908-bec4-d1a5f57bb819

在Microsoft.ApplicationServer.Caching.DataCache.ThrowException(ErrStatus errStatus,的Guid trackingId,异常responseException,字节[] []的有效载荷,的EndpointId目的地)在Microsoft.ApplicationServer.Caching.DataCacheFactory.EstablishConnection(IEnumerable'1服务器,RequestBody请求,Func键'3 sendMessageDelegate,DataCacheReadyRetryPolicy retryPolicy)位于Microsoft.Web.DistributedCache的Microsoft.ApplicationServer.Caching.DataCacheFactory.GetCache(String cacheName,CreateNewCacheDelegate cacheCreationDelegate,DataCacheInitializationViaCopyDelegate initializeDelegate)的Microsoft.ApplicationServer.Caching.SocketClientProtocol.Initialize(IEnumerable'1服务器). Microsoft.Web.DistributedCache.DistributedCacheOutputCacheProvider.CreateInternalProvider(IHttpRuntime httpRuntime,OutputCacheI)中的CacheHelpers.RunCacheCreationHooks(CacheConnectingEventArgs fetchingEventArgs,IDataCacheFactory dataCacheFactory,Object sender,EventHandler'1 fetchingHandler,EventHandler'1 fetchedHandler)nitializationData initData,IDataCacheFactory dataCacheFactory,EventHandler'1 cacheFetching,EventHandler'1 cacheFetched),位于System.Web.Caching.OutputCache的Microsoft.Web.DistributedCache.DistributedCacheOutputCacheProvider.Get(String key)上的Microsoft.Web.DistributedCache.DistributedCacheOutputCacheProvider.GetInternalProvider()在.获得在System.Web.HttpApplication System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute(String键)在System.Web.Caching.OutputCacheModule.OnEnter(对象源,EventArgs的EventArgs的)(). ExecuteStep(IExecutionStep step,Boolean&completedSynchronously)

在线上调查了这个错误我发现了一个微软的来源(对不起,我不再有链接)说基本上"它应该有时发生,不要担心它"然而这感觉不对.我在开发工作之前没有看到过这个错误,但是其他一个开发项目的开发人员最近在调试中经历过这个错误.有没有人经历过这个或者肯定知道我们不必担心它?

为了排除这一点,我部署了服务,并在Web角色上关闭了缓存,但这没有任何区别.

这是我在web.config中的缓存配置.

  <!--To use the in-role flavor of Windows Azure Cache, set identifier to be the cache cluster role name -->
  <!--To use the Windows Azure Cache Service, set identifier to be the endpoint of the cache cluster -->
  <autoDiscover isEnabled="true" identifier="rolename.here" />

  <!--<localCache isEnabled="true" sync="TimeoutBased" objectCount="100000" ttlValue="300" />-->
  <!--Use this section to specify security settings for connecting to your cache. This section is not required if your cache is hosted on a role that is a part of your cloud service. -->
  <!--<securityProperties mode="Message" sslEnabled="true">
    <messageSecurity authorizationInfo="[Authentication Key]" />
  </securityProperties>-->
</dataCacheClient>
Run Code Online (Sandbox Code Playgroud)


在我的日志记录中记录的第二个错误是:

System.Web.HttpException(0x80004005):在发送HTTP标头后,服务器无法附加标头.在System.Web.HttpResponse.AppendHeader(字符串名称,字符串值)System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()在System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,布尔逻辑completedSynchronously)

这感觉就像副作用而不是问题的原因,但欢迎任何评论.


我试过的其他事情:

  • 在Azure中创建了一个配置的新Cloud Service - 结果相同.
  • 向解决方案添加了新的Azure Cloud Service项目并从头开始配置 - 结果相同.

在这一点上,我完全迷失了该做什么,我无法理解为什么它在调试中完美运行但在部署时却没有,为什么没有日志在这个问题上有更多的亮点 - 目前我甚至不知道该怎么做寻找有类似问题的人.

最后一个问题归结为为什么我的页面没有加载?

我要将我原来的Windows 7机箱重新启动,然后从那里进行部署,看看是否有任何区别.

如果您需要更多信息,请随时询问.

感谢您阅读本文以及您可以提供的任何帮助.

Gau*_*tri 5

请确保缓存库的版本与SDK版本匹配.如果版本不匹配,您将收到此错误.