【问题标题】:determining which server (in a web farm) the asp.net ajax request came from?确定 asp.net ajax 请求来自哪个服务器(在网络场中)?
【发布时间】:2011-06-25 15:42:03
【问题描述】:

我在想我们如何找出页面是从哪个服务器提供的:我会这样做,例如在页面上放置一个隐藏变量,该变量具有处理它的服务器的 IP 或服务器名称。但是对于 asp.net ajax 请求我该怎么办:那些作为部分回发发生的请求?我必须把隐藏变量放在更新面板中,但是如果页面中有很多更新面板怎么办?

我查看了另一个SO post,但解决方案是针对 iis 7。iis6 的等价物是什么?我们如何阅读标题?去哪里看?

【问题讨论】:

  • 什么问题 - 添加一个带有隐藏字段的 UpdatePanel 并将它的 UpdateMode 值设置为“Always”
  • 如果有多个更新面板,那么这将不是一个优雅的解决方案,因为我必须在所有更新面板中添加一个隐藏字段。然后我再次注册一个脚本块来完成这项工作,但这似乎并不优雅。
  • UpdatePanel 控件的内容在以下情况下更新: 如果 UpdateMode 属性设置为 Always,则 UpdatePanel 控件的内容会在来自页面任何位置的每次回发时更新。这包括来自其他 UpdatePanel 控件内的控件的异步回发和来自不在 UpdatePanel 控件内的控件的回发。 msdn.microsoft.com/en-us/library/…

标签: asp.net iis-6 web-farm


【解决方案1】:

您可以通过 IIS MMC 打开站点的属性然后单击 HTTP 标头选项卡来设置 IIS6 自定义标头:

您也可以使用adsutil(在c:\InetPub\AdminScripts 中找到):

cscript adsutil 设置 w3svc/1/root/HttpCustomHeaders "X-Served-By:Server-001"

上述命令将为默认网站配置 HTTP 标头。

使用adsutil 时要小心,因为这会覆盖任何已配置的现有标头。

要设置多个标题:

cscript adsutil 设置 w3svc/1/root/HttpCustomHeaders "X-Served-By:Server-001" "X-Powered-By:ASP.NET"

更新:

关于访问客户端上的响应标头,如果您使用的是 ASP.NET AJAX 更新面板,请将此脚本添加到页面末尾:

<script type="text/javascript" language="javascript">
  Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endPageRequest);

  function endPageRequest(sender, args) {

    var allHeaders = args._response._xmlHttpRequest.getAllResponseHeaders();
    var headers = allHeaders.split('\n');

    // At this point you have a string array of response headers.

    // Or you can get an individual header:
    var header = args._response._xmlHttpRequest.getResponseHeader("MyHeader");

  }
</script>

这将挂钩到页面请求管理器,这样当 Ajax 请求完成时,您还可以看到底层 XMLHttpRequest 对象,该对象具有响应标头的副本。

你可以用 jQuery 做类似的事情:

$.ajax({
  url: "/Home/HeadTest",
  success: function (data, textStatus, xhr) {
    var header = xhr.getResponseHeader("MyHeader");                 
  }
});

【讨论】:

  • @deostroll - cscript adsutil get w3svc/1/root/HttpCustomHeaders
  • 不,我的意思是当从服务器向客户端发送响应时,据我所知,(从客户端)查找/读取标头的唯一方法是使用 fiddler 之类的工具,或者还有其他方式?
  • @Kev,我喜欢你的回答。但它很难用javascript方式做事。最终用户主要使用一个叫做kioware的特殊软件浏览网站,这不是普通的浏览器!即使不是这样(即使用普通浏览器时),我可以读取值的最佳方式是什么?在正常的回发(其中服务器名称被写入隐藏变量)中,我所要做的就是查看页面源代码。如果我实施了您的解决方案,我该如何进行诊断?
  • @deostroll - 对于上面的 ajax 内容,您可以将值注入隐藏的 div。在 chrome 等现代浏览器中,您可以在页面上执行 Inspect Element(而不是查看源代码)以查看实时 DOM,然后找到该元素。
猜你喜欢
  • 2018-04-16
  • 1970-01-01
  • 1970-01-01
  • 2020-05-10
  • 2013-06-10
  • 1970-01-01
  • 2014-03-18
  • 1970-01-01
  • 2011-10-23
相关资源
最近更新 更多