我的IIS中有一个默认网站,我在其中创建了一个虚拟目录“wsdls”。
我想收集有关我的虚拟目录触发了多少请求的统计信息。这需要在Web服务器级别进行请求拦截并收集统计信息。 “HTTPModule”是我考虑过的适用于这种情况的众多解决方案之一。因此我开始建立一个。
出于测试目的,我想创建一个HTTP模块并将其应用于特定扩展文件(例如* .wsdl)以及此虚拟目录中任何.wsdl文件的每个GET请求,我将要重定向该应用程序到“www.google.com”。这将展示如何在IIS上使用和部署HTTP模块的一个很好的示例。
使用Visual Studio编写的HTTPModule如下所示,
namespace Handler.App_Code
{
public class HelloWorldModule : IHttpModule
{
public HelloWorldModule(){
}
public String ModuleName{
get { return "HelloWorldModule"; }
}
// In the Init function, register for HttpApplication
// events by adding your handlers.
public void Init(HttpApplication application){
application.BeginRequest +=
(new EventHandler(this.Application_BeginRequest));
application.EndRequest +=
(new EventHandler(this.Application_EndRequest));
}
private void Application_BeginRequest(Object source,
EventArgs e)
{
// Create HttpApplication and HttpContext objects to access
// request and response properties.
HttpApplication application = (HttpApplication)source;
HttpContext context = application.Context;
context.Response.Redirect("www.google.com");
}
private void Application_EndRequest(Object source, EventArgs e)
{
//Nothing to be done here
}
public void Dispose() { }
}
}
现在我为x64版本完成了这个项目的构建,我能够成功浏览“dll”文件。现在我必须在IIS中注册此dll,每当我尝试访问* .wsdl文件时,请求会自动转移到“www.google.com”。这是我已经完成的下一步,
然后我启用了Handler映射,如下所示,
我假设是!!没有什么比这更好的了。我应该能够拦截所有形式为“* .wsdl”的HTTP请求的请求。这意味着每当我从服务器访问任何wsdl时,控制权应该返回谷歌(因为在开始请求中写入了逻辑)。但不幸的是,我未能实现它。可以在这做什么?
答案 0 :(得分:0)
我注意到的一件事是,当您尝试重定向到外部URL时使用 HTTP://
所以改变 context.Response.Redirect( “www.google.com”); 至 context.Response.Redirect(“http://www.google.com”,true);
答案 1 :(得分:0)
我可以解决我面临的问题,下面是我理解中缺少的观察结果,这些观察结果帮助我解决了我的问题:
找到正确的web.config文件:
"C:\\inetpub\\wwwroot"
修改web.config:
要考虑的一般要点: