簡體   English   中英

為IIS中托管的WCF服務創建自定義.svc處理程序

[英]Creating a custom .svc handler for WCF service hosted in IIS

我在IIS 7中托管wcf服務。我很好奇是否可以創建自己的.svc HttpHandler映射和類來處理服務請求。

例如,如果我要攔截對以“ .foo”擴展名結尾的文件的任何請求,則可以將其添加到我的web.config中

<handlers>
     <add name="*.foo_**" path="*.foo" verb="*" type="MyServer.FooHttpHandler" />      
</handlers>

我可以在默認根目錄中有一個類,該類可以完成以下操作

public class FooHandler: IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        // do stuff, validate?

        HttpContext.Current.Response.ClearContent();
        HttpContext.Current.Response.ClearHeaders();
        HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("filename={0}", url));
        HttpContext.Current.Response.AddHeader("Content-Type", "fooMimeType");
        HttpContext.Current.Response.WriteFile(url);
        HttpContext.Current.Response.End();
    }

    public bool IsReusable
    {
        get { return false; }
    }
}

是否可以對wcf .svc請求執行類似的操作? 我不確定這是否完全相同,因為我不必提供文件來響應,所以我想截取並代理響應。

還是實現我需要的服務前邏輯的服務行為的更好方法?

您想達到什么目的? 不知道您是否可以替換現有的* .svc http處理程序-但是您可以更輕松地做的是為WCF服務創建自己的自定義ServiceHostFactory 您基本上可以在* .svc文件中添加一個屬性:

<%@ ServiceHost Language="C#" Debug="true" 
    Service="YourNamespace.YourService" 
    Factory="YourNamespace2.YourServiceHostFactory" %>

現在,IIS將使用此方法實例化您自己的YourServiceHostFactory並要求您創建YourService類的實例。 也許您可以加入這里的流程,然后做您需要做的事情?

如果確實需要,也可以使用ASP.NET Routing和返回自己的IHttpHandler實現的IRouteHandler。
http://msdn.microsoft.com/en-us/library/system.web.routing.iroutehandler.gethttphandler.aspx http://msdn.microsoft.com/en-us/library/cc668201.aspx

過去,我在設置WCF數據服務時就這樣做了,但我不明白為什么它在這里也無法正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM