这很可能是一个非常长的帖子,试图全面解释我的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.User
和Thread.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)
这感觉就像副作用而不是问题的原因,但欢迎任何评论。
我尝试过的其他事情:
此时我完全迷失了该怎么做,我无法理解为什么它在调试中完美运行但在部署时却没有,以及为什么没有日志在这个问题上有更多的亮点 - 此刻我甚至都没有确定要搜索什么来找到遇到类似问题的人。
最后一个问题归结为为什么我的页面没有加载?
我要将旧的Windows 7机箱重新启动,然后从那里进行部署,看看是否有任何差异。
请不要犹豫,询问您是否需要更多信息。
感谢您阅读本文以及您可以提供的任何帮助。
答案 0 :(得分:5)
请确保缓存库的版本与SDK版本匹配。如果版本不匹配,您将收到此错误。