在IIS中的虚拟目录上使用HTTP模块

时间:2016-07-14 18:39:22

标签: web-services iis wsdl

我的IIS中有一个默认网站,我在其中创建了一个虚拟目录“wsdls”。

enter image description here

我想收集有关我的虚拟目录触发了多少请求的统计信息。这需要在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”。这是我已经完成的下一步,

enter image description here

然后我启用了Handler映射,如下所示,

enter image description here

我假设是!!没有什么比这更好的了。我应该能够拦截所有形式为“* .wsdl”的HTTP请求的请求。这意味着每当我从服务器访问任何wsdl时,控制权应该返回谷歌(因为在开始请求中写入了逻辑)。但不幸的是,我未能实现它。可以在这做什么?

2 个答案:

答案 0 :(得分:0)

我注意到的一件事是,当您尝试重定向到外部URL时使用 HTTP://

所以改变 context.Response.Redirect( “www.google.com”); 至 context.Response.Redirect(“http://www.google.com”,true);

答案 1 :(得分:0)

我可以解决我面临的问题,下面是我理解中缺少的观察结果,这些观察结果帮助我解决了我的问题:

找到正确的web.config文件:

  • IIS中的每个网站都有一个web.config文件来控制应用程序。
  • 由于我正在使用"默认网站",这是指目录"C:\\inetpub\\wwwroot"
  • 会有一个" web.config"该导演将出现的文件。如果不存在,请创建它。

修改web.config:

  • 确定需要修改的文件后,只需将必要的模块配置添加到web.config
  • 即可
  • 在这种情况下,我们想要将一个模块添加到默认网站,可能的设置将在下面显示,

enter image description here 将内容添加到bin目录:

  • 现在,如果您尝试运行该应用程序,IIS将无法找到任何要运行的DLL或可执行文件,因此我们需要将可执行文件保留在特定位置。
  • 创建一个导演,如果尚未出现名称" bin"在目录的根目录下,放置您希望此网站执行的所有dll。样本如下所示,

enter image description here

要考虑的一般要点:

  • 必须为包含dll的文件夹提供正确的访问权限。
  • 理想情况下,建议不要修改整个网站。如果只在他们的网络应用程序上工作,那将是理想的。
  • 如果找不到web.config,我们可以创建一个。
  • 如果网络根目录中没有bin,我们可以创建一个。