Создание собственного обработчика .svc для службы WCF, размещенной в IIS - PullRequest
2 голосов
/ 19 сентября 2011

Я размещаю службу wcf в IIS 7. Мне было любопытно, можно ли создать собственные сопоставления и класс HttpHandler .svc для обработки запросов на обслуживание.

Например, если я должен был перехватитьлюбые запросы к файлам, которые заканчивались расширением ".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?Я не уверен, будет ли это точно так же или нет, так как мне не нужно передавать файл для ответа, я хочу перехватить и прокси-ответ.

Или это лучший способ реализовать поведение службы, которое выполняет мою требуемую логику перед обслуживанием?

Ответы [ 2 ]

1 голос
/ 19 сентября 2011

Чего ты пытаешься достичь? Не уверен, что вы сможете заменить существующий обработчик * .svc http - но гораздо проще сделать свой собственный ServiceHostFactory для службы WCF. Вы просто добавляете один атрибут в ваш файл * .svc:

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

Используя это, IIS теперь создаст экземпляр вашего собственного YourServiceHostFactory и попросит вас создать экземпляр класса YourService. Может быть, вы можете подключиться к потоку здесь и сделать то, что вам нужно сделать?

0 голосов
/ 20 сентября 2011

Вы можете использовать ASP.NET Routing и IRouteHandler, который также возвращает вашу собственную реализацию IHttpHandler, если вы действительно этого хотите
http://msdn.microsoft.com/en-us/library/system.web.routing.iroutehandler.gethttphandler.aspx http://msdn.microsoft.com/en-us/library/cc668201.aspx

Я делал это в прошлом, когда настраивал службы данных WCF, и я не понимаю, почему это не может работать и здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...