Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
抑制关联cookie以强制客户端连接到另一个Azure应用程序节点_Azure_Azure Web App Service_Sitefinity_Session Affinity - Fatal编程技术网

抑制关联cookie以强制客户端连接到另一个Azure应用程序节点

抑制关联cookie以强制客户端连接到另一个Azure应用程序节点,azure,azure-web-app-service,sitefinity,session-affinity,Azure,Azure Web App Service,Sitefinity,Session Affinity,我有一个C#web应用程序,它使用的组件(Progress Telerik Sitefinity CMS)需要很长时间(2分钟)才能初始化。在此阶段访问站点的用户将被重定向到每秒轮询一次状态的页面,直到初始化完成。(这是内置的Sitefinity行为) 我正在Azure应用程序服务中托管我的应用程序。如果我增加实例的数量(放大),我的一些用户会在新节点仍在初始化时出现在该节点上。问题是,由于Azure添加的关联cookie,它们将保留在此节点上 我想要亲缘关系,除非站点正在初始化。在这种情况下,

我有一个C#web应用程序,它使用的组件(Progress Telerik Sitefinity CMS)需要很长时间(2分钟)才能初始化。在此阶段访问站点的用户将被重定向到每秒轮询一次状态的页面,直到初始化完成。(这是内置的Sitefinity行为)

我正在Azure应用程序服务中托管我的应用程序。如果我增加实例的数量(放大),我的一些用户会在新节点仍在初始化时出现在该节点上。问题是,由于Azure添加的关联cookie,它们将保留在此节点上

我想要亲缘关系,除非站点正在初始化。在这种情况下,我想放弃cookie并进行投票。在这种情况下,我被分配了一个随机节点,因此在几秒钟内就找到了一个初始化的节点

问题是:我如何做到这一点?发生的很多事情都是在Sitefinity中处理的,所以我求助于修改我的global.asax中的内容。它不起作用。我试着把这个放在我的global.asax.cs中:

受保护的无效应用程序\u PreRequestHandlerExecute(对象发送方,事件参数e)
{
var path=HttpContext.Current.Request.Url.AbsolutePath;
//“/sitefinity/status”是客户端重定向到的页面
//“/appstatus”用于轮询初始化状态
如果(路径=“/appstatus”| |路径=“/sitefinity/status”)
{
//“ARRAffinity”是Azure亲和cookie
响应.Cookies.删除(“ARRAffinity”);
//只是删除cookie不起作用,所以我尝试覆盖它
Add(新的HttpCookie(“ARRAffinity”,“-”{HttpOnly=true});
//据报道,这会抑制Azure添加cookie
Add(“ARR Disable Session Affinity”,“true”);
};
}
如何将客户端强制到其他节点

编辑 我想我发现了问题的一部分

  • 首先,请求“/”。这将返回302重定向,但也返回ARRAffinity cookie
  • 然后请求“/sitefinity/status”。ARR Disable会话关联和cookie都被剥离。这意味着在客户端上未清除cookie
  • 在轮询时,客户端已经拥有cookie。因此,用户永远不会重定向到另一个节点
这可能就是问题所在。现在要解决它

编辑

我遵循Vesselin Vassilevs的建议,将其添加到我的站点配置文件中:

<appSettings>
    <add key="sf:AppStatusPageResponseCode" value="503" />
</appSettings>

为什么不完全禁用arr关联cookie? Sitefinity后端在没有arr cookie和多个实例的情况下工作正常

编辑:我们需要告诉Azure站点在Sitefinity初始化期间尚未就绪。问题是,appStatus页面(在初始化期间由Sitefinity显示)返回状态代码302甚至200,这使Azure相信站点运行正常。我在这里写到: 根据您的Sitefinity版本,您可以在那里实现自定义解决方案(在系统重新启动期间手动返回http代码503),或者在web.config(Sitefinity 9+)中设置以下设置



如果我完全禁用会话关联,在扩展时,每个请求的一半将路由到仍在初始化的节点。这将影响我网站上的每个用户,因为javascript和图像不会加载。也许可以尝试将Sitefinity状态页的状态代码从200设置为503-这将告诉Azure负载平衡器web角色尚未准备好接收请求。为此,您需要在web.config的appSettings中添加以下内容:谢谢,Veselin。这是我尝试的第一件事。但由于某些原因,Azure仍然没有看到Sitefinity尚未就绪。我怀疑这是因为随机页面没有返回503,而是302重定向到503状态页面。如果有一种方法可以告诉Azure Sitefinity还没有准备好,那将是最好的解决方案。我不久前在这里写道:也许值得尝试如果你对你的建议做出回答,我会将其标记为正确。
<add key="sf:AppStatusPageResponseCode" value="503" />