【问题标题】:Custom Http Handlers IIS7 and ASP.NET自定义 Http 处理程序 IIS7 和 ASP.NET
【发布时间】:2009-08-13 16:09:42
【问题描述】:

我们在 web.config 中指定了一些 HTTP 处理程序。当我们通过网站项目运行该站点时,一切正常。但由于某种原因,在将其移植到 WAP 项目并指向 .NET 3.5 框架后,当我在我们的开发盒上以 IIS 7 启动该站点时,处理程序无法正常工作。除了我的 web.config 中已经存在的指定自定义处理程序之外,我是否需要在 IIS7 中做一些特殊的事情?

当我查看我们网站的 IIS 7 中的处理程序映射部分时,我确实看到了与我们的自定义扩展一起列出的 3 个处理程序。所以看起来它正在获取我们在 web.config 中指定的处理程序。但是我知道在非 wap 网站中工作的处理程序在这个 WAP 项目中不工作,我不知道为什么。

例如,当我们的一个处理程序在被引用时尝试启动时,我得到:

“/”应用程序中的服务器错误。 解析器错误 说明:解析服务此请求所需的资源时出错。请查看以下特定的解析错误详细信息并适当修改您的源文件。

Parser Error Message: Could not create type 'jaxHandler'.

Source Error:

Line 1:  
Line 2:  
Line 3:  using System;


Source File: /jaxHandler.ashx    Line: 1

Version Information: Microsoft .NET Framework Version:2.0.50727.3074; ASP.NET Version:2.0.50727.3074 

此外,当我尝试点击我们网站上带有 .customextension 的超链接时,处理程序似乎没有拾取它。

所以当我点击超链接时,我得到:

HTTP Error 404.0 - Not Found
The resource you are looking for has been removed, had its name changed, or is temporarily unavailable. Detailed Error InformationModule IIS Web Core 
Notification MapRequestHandler 
Handler StaticFile 
Error Code 0x80070002 
Requested URL http://sss:80/somename.prod
Physical Path C:\www\sss\somename.prod 
Logon Method Anonymous 
Logon User Anonymous 

(出于隐私考虑,我已将真实文本替换为“somename”,将我们的公司名称替换​​为“sss”)。

如果我查看 IIS7 中的 Http Handlers 部分,我确实看到 *.prod 已注册。以下是我们在 web.config 中自定义部分下的设置方式:

<add name="sss" path="*.prod" verb="*" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" resourceType="Unspecified" preCondition="bitness32"/>

【问题讨论】:

  • 请详细说明。 “它不起作用”并没有告诉我太多。
  • 好的,我添加了更多细节。

标签: asp.net iis-7


【解决方案1】:

对于在 IIS7 上运行的 ASP.NET 应用程序,应将 HttpHandlers 映射到 web.config 的 &lt;system.webServer&gt; 部分。在 IIS6 中,它们被映射到 &lt;system.web&gt; 部分。

<system.webServer>
    <handlers>
        <add name="HandlerName" 
             path="HandlerPath" verb="*" type="Handler.Type"
             resourceType="Unspecified" />
    </handlers>
</system.webServer>

【讨论】:

  • 是的,我们已将我们的映射到 webServer,因为该站点已经在我们的 IIS7 中的 prod 服务器上运行
【解决方案2】:

您需要做的是构建您的代码。

您需要将所有 C# 代码复制到 .ashx.cs 文件中。事实上,我建议你创建一个新的 .ashx 并将 C# 代码复制到它的 .ashx.cs 文件中。

网站是动态构建的。 Web 应用程序项目与 Visual Studio 中的所有其他类似项目类型一样,需要在源文件中包含代码,并将该代码构建到程序集中。

【讨论】:

  • .ashx 后面​​没有代码。我懂了。是的,因为它在一个网站项目中。明白了
  • 你明白了,但是说“网站”——它们不是项目。
  • 谢谢。因为当我通过 .ashx id 运行转换为 Web 应用程序时,并没有创建代码隐藏类或 .designer。看起来没有创建 .designer,但有人会认为转换为 Web 应用程序至少会创建代码隐藏文件。
  • 所以我只是认为即使在 WAP 中也没有 .ashx 的代码隐藏,这是不正确的。
  • @coffeeaddict:不,它们不是项目。它们不同于 Visual Studio 创建的所有其他类型的项目。实现网站是一个可怕的想法:我们现在必须询问某人正在使用哪种类型的网站。 Microsoft 打算让我们所有人都使用网站,因此在 VS2005 中删除了 WAP。至少那时只有一种——在专业知识和行为上没有分歧。但是在 VS2005 SP1 中重新添加 WAP 后,我们最多只能得到一个“混合消息”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-19
  • 2012-08-30
  • 1970-01-01
  • 2011-02-15
  • 2011-06-14
  • 2012-06-12
  • 2012-10-25
相关资源
最近更新 更多