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

时间:2015-02-17 13:00:18

标签: asp.net iis azure deployment 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 Cloud Service由两个角色组成,一个是托管网站的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

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

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

此时我希望执行MasterPage中的master_Page_PreLoad方法或其他一个预加载事件或Page的自定义实现,但不会命中它们。< / p>

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


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

  

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

     

在   Microsoft.ApplicationServer.Caching.DataCache.ThrowException(ErrStatus   errStatus,Guid trackingId,Exception responseException,Byte [] []   有效载荷,EndpointID目的地)at   Microsoft.ApplicationServer.Caching.DataCacheFactory.EstablishConnection(IEnumerable的&#39; 1   服务器,RequestBody请求,Func&#39; 3 sendMessageDelegate,   DataCacheReadyRetryPolicy retryPolicy)at   Microsoft.ApplicationServer.Caching.SocketClientProtocol.Initialize(IEnumerable的&#39; 1   服务器)   Microsoft.ApplicationServer.Caching.DataCacheFactory.GetCache(字符串   cacheName,CreateNewCacheDelegate cacheCreationDelegate,   DataCacheInitializationViaCopyDelegate initializeDelegate)at   Microsoft.Web.DistributedCache.CacheHelpers.RunCacheCreationHooks(CacheConnectingEventArgs   fetchingEventArgs,IDataCacheFactory dataCacheFactory,Object sender,   EventHandler&#39; 1 fetchingHandler,EventHandler&#39; 1 fetchedHandler)at   Microsoft.Web.DistributedCache.DistributedCacheOutputCacheProvider.CreateInternalProvider(IHttpRuntime   httpRuntime,OutputCacheInitializationData initData,IDataCacheFactory   dataCacheFactory,EventHandler&#39; 1 cacheFetching,EventHandler&#39; 1   cacheFetched)at   Microsoft.Web.DistributedCache.DistributedCacheOutputCacheProvider.GetInternalProvider()   在   Microsoft.Web.DistributedCache.DistributedCacheOutputCacheProvider.Get(字符串   key)在System.Web.Caching.OutputCache.Get(String key)处   System.Web.Caching.OutputCacheModule.OnEnter(Object source,EventArgs   eventArgs)at   System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()   在System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,   布尔和放大器; completedSynchronously)

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

为了排除这种情况,我在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>


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

  

System.Web.HttpException(0x80004005):服务器无法追加标头   发送HTTP标头后。在   System.Web.HttpResponse.AppendHeader(String name,String value)at   System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()   在System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,   布尔和放大器; completedSynchronously)

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


我尝试过的其他事情:

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

此时我完全迷失了该怎么做,我无法理解为什么它在调试中完美运行但在部署时却没有,以及为什么没有日志在这个问题上有更多的亮点 - 此刻我甚至都没有确定要搜索什么来找到遇到类似问题的人。

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

我要将旧的Windows 7机箱重新启动,然后从那里进行部署,看看是否有任何差异。

请不要犹豫,询问您是否需要更多信息。

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

1 个答案:

答案 0 :(得分:5)

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