解决Http Handler在IIS6与IIS7中的问题


本文和大家分享一下Http Handler由IIS6到IIS7的使用问题,希望对你有所帮助。最近写了一个监控服务器状态的页面,内容很简单,就是显示一下服务器当前CPU和内存的使用情况。因为想让它每3秒刷新一次,所以就把功能放在了ashx页里面,页面每3秒调用一次。

$(document).ready(function() {
            loaddata();
            setInterval(loaddata,
3000);
        });
       
function loaddata() {
            $.getJSON(
"Common/ServerInfoHandler.ashx?format=json&jsoncallback=?", {}, function(json) {
                $(
"#labServerName").text("服务器名称:" + json.ServerName);
                $(
"#labServerIP").text("服务器地址:" + json.ServerIP);
                $(
"#NumberOfProcessors").text("CPU数量:" + json.CPUNum);
                $(
"#ProcessorType").text("CPU类型:" + json.CPUType);
                $(
"#ProcessorLevel").text("CPU级别:" + json.CPULevel);
                $(
"#MemoryLoad").text("内存使用率:" + json.MemoryLoad);
                $(
"#TotalPhys").text("物理内存共有:" + json.MemoryTotalPhys);
                $(
"#AvailPhys").text("可使用的物理内存有:" +
                $(
"#Date").text("服务器时间:" + json.DateTime);
                $(
"#cpu").text("CPU平均使用率:" + json.CPULoad);
            });
        }

 

         东西很简单,写完以后用VisualStudio直接运行,发现取到并显示出来的服务器名和地址都是127.0.0.1,所以就想在IIS上部署一下看看。开发的机器是Win7,自带的是IIS7,这玩意真没用过,跟IIS6差别太大了,一时确实有点找不到北。好不容易部署好了以后,浏览页面发现没有任何信息显示出来,在Visual Studio开调试,发现ashx页根本没有被调用。

         无奈放“狗”,可能是我当时“狗”的方向不对吧。“狗”出一堆信息来,发现都不好使,解决不了问题。发布到测试服务器上Windows Server 2003 +IIS6,这次部署上去以后浏览没问题。当时我很郁闷啊。最怕就是这种没头没脑的问题了。

         跟同事说了一下,他很闲,没多会儿发给我一个页面,鸟语的

         http://forums.asp.net/t/1421108.aspx

         看看发现上面基本就是说加配置,试了试,无一好使,不过这个页面是问题解决的开端,虽然里面的回复没一个好使的不过第二条回复(传说中的沙发),提供了一个链接,说是一种解决方案。点过去看看

         http://www.infosysblogs.com/microsoft/2007/02/configuring_custom_http_handle.html

         我也没有耐心每个单词的看,看了几个要点,就是在IIS7中你的网站的

               

   里面右上角

           

  “添加托管处理程序”中加上你的ashx。

   

  我这个人就是没耐心,看见这我就直接在IIS里面加了,发现还是不好使。回头再看看人家写的,他说Type里已经自动识别他的ashx了,我是直接手写进去的,这很有问题啊,但是我的Type里确实没有识别出来。又看到下面说的配置了

代码
   
   
< system.webServer >
< handlers >
< addname = " Custom Handler " path = " *.sample " verb = " * " type = " HelloWorldHandler "
resourceType
= " Unspecified " />
</ handlers >
</ system.webServer >

  拷过来再说,扔进我的web.config改吧改吧,还是不好使!粗心坏大事,又发现人家还给了一个MSDN的How Toarticle链接,点进去看看。这下清楚了

  有鸟语好的,往下可以不用看我写的了直接去看MSDN上就好。鸟语不好的我简单给解释一下。

  你要用Synchronous HTTPHandlers  不是建ashx了,而是在App_Code里建一个类,然后继承、实现IHttpHandler

代码
   
   
usingSystem.Web;

public class HelloWorldHandler : IHttpHandler
{
public HelloWorldHandler()
{
}
public voidProcessRequest(HttpContext context)
{
HttpRequestRequest
= context.Request;
HttpResponse Response
= context.Response;
// This handler is called whenever a file ending
// in .sample is requested. A file with that extension
// does not need to exist.  
Response.Write(
" Hello Handler! " );
}
public boolIsReusable
{
// To enable pooling, return true here.
// This keeps the handler in memory.  
get { return false ; }
}
}

然后呢,配置web.config。这里比较麻烦,有三种配置方式。

IIS6:

  
  
< configuration >
< system.web >
< httpHandlers >
< add verb = " * " path = " *.sample "
type
= " HelloWorldHandler " />
</ httpHandlers >
</ system.web >
</ configuration >
IIS7是分两种工作模式经典模式和集成模式,所以配置也是分两种的。
  经典模式是为了与之前的版本兼容,使用ISAPI扩展来调用ASP.NET运行库,原先运行于IIS6.0下的Web应用程序迁移到IIS7.0中只要将应用程序配置成经典模式,代码基本不用修改就可以正常运行。
配置如下
代码
<configuration>  <system.web>    <httpHandlers>      <add verb="*" path="*.sample"         type="HelloWorldHandler"/>    </httpHandlers>  </system.web>    <system.webServer>        <handlers>            <add  verb="*" path="*.sample"                  name="HelloWorldHandler"                  type="HelloWorldHandler"                  modules="IsapiModule"/>         </handlers>    </system.webServer></configuration>  集成模式是一种统一的哀求处理管道,它将ASP.NET请求管道与IIS核心管道组合在一起,这种模式能够提供更好的性能,能够实现配置和治理的模块化,而且增加了使用托管代码模块扩展IIS时的灵活性。
配置
代码
<configuration>  <system.webServer>    <handlers>      <add verb="*" path="*.sample"         name="HelloWorldHandler"        type="HelloWorldHandler"/>    </handlers>  </system.webServer></configuration>  关于配置我要解释几句,name和type就不用说,verb不知道啥意思,照写就行;path这个节里面的值是可以指定的,现在这样*.sample在测试的时候,你就要指向test.Sample。如果你有多个Handler的话就不能这么指定了,最好是指定一个名字比如:
<add verb="*" path="HelloWorld.sample" name="HelloWorldHandler" type="HelloWorldHandler"/><add verb="*" path="HelloHeaven.sample" name="HelloHeavenHandler" type="HelloHeavenHandler"/>
写完配置以后就可以测试一下自己的Handler了,测试地址如下http://localhost/HttpHandler/test.sample当然你要是设置了名字就可以用
 
http://localhost/HttpHandler/ HelloWorld.sample http://localhost/HttpHandler/ HelloHeaven.sample
用的时候也就变成了
$.getJSON("HandlerHelloWorld.sample?format=json&jsoncallback=?",……写到这里其实还有一个问题,希望有兄弟知道的话给小弟解惑。
  用类写Handler的话那ashx呢?怎么用啊?
  添加新文件的时候一般处理程序(ashx)还是可以选的。
  还有就是iis6和iis7要写不同的三种配置,有没有通用的写法?不用具体非的指定某种IIS。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在IIS部署Django项目,您需要执行以下步骤: 1. 安装IIS:如果您还没有安装IIS,请先安装它。可以使用“控制面板”的“程序和功能”来安装IIS。 2. 安装Python:确保您的服务器上安装了Python。 3. 安装wfastcgi:使用以下命令安装wfastcgi: ``` pip install wfastcgi ``` 4. 创建Django项目:创建并配置Django项目。确保您的项目能够在本地运行。 5. 创建Web应用程序:在IIS创建Web应用程序。使用“管理工具”打开IIS管理器,右键单击“网站”并选择“添加网站”。为网站提供名称、物理路径和端口号。 6. 安装FastCGI:在IIS安装FastCGI。使用“服务器管理器”打开IIS管理器,选择“服务器管理器”窗口的“角色”,然后选择“添加角色服务”。选择“Web服务器IIS)”和“应用程序服务器”。 7. 配置FastCGI:在IIS配置FastCGI。打开IIS管理器,右键单击Web应用程序并选择“添加应用程序”。为应用程序提供别名和物理路径。在“处理程序映射”添加一个新的FastCGI映射。选择“FastCGI”处理程序类型,并提供可执行文件的路径(例如,C:\ Python27 \ python.exe)。在“Request Restrictions”,确保“Invoke handler only if request is mapped to:File”选项被选。 8. 配置wfastcgi:在IIS配置wfastcgi。打开IIS管理器,右键单击Web应用程序并选择“配置”,然后选择“添加模块映射”。在“请求路径”输入“*”,在“模块”输入“FastCgiModule”,在“可执行文件”输入“C:\ Python27 \ Scripts \ wfastcgi.py”。在“请求限制”,选择“所有Verbs”,并确保“Invoke handler only if request is mapped to:File”选项被选。 9. 测试:测试您的Django应用程序是否能够在IIS运行。 这些步骤可能因不同的操作系统版本和IIS版本而有所不同。如果您遇到任何问题,请查看文档或咨询网络管理员。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值