2010-11-09 3 views
1

Есть ли .net-эквивалент сервлета инициализации Java?Есть ли .net-эквивалент сервлета инициализации Java?

Пока мы находимся в этом эквиваленте фильтра?

И, наконец, если указанная вещь существует (фильтры), они могут выполняться до/после запроса в службу WCF?

+0

Вы конкретно используете WCF? Если да, используете ли вы его в IIS или вне его? – casperOne

+0

В этом отношении, что такое фильтр Java точно? – casperOne

+0

@casperOne: Использование WCF для веб-сервисов (серверных веб-сервисов) в IIS. Вы можете посмотреть фильтр как «перехватчик». Как только запрос делается на веб-ресурс, фильтр может предварительно обработать (или выполнить пост-обработку или оба) запрос (или ответ). Одно использование для фильтров (в привязке) может регистрироваться, несколько применений исходящих фильтров включают добавление заголовков (думаю, нет кеша) и сжатие ответов (gzip) – iggymoran

ответ

1

While you can use the OnStart event of HttpApplication to intercept when the service starts as well as IHttpModule for intercepting requests, это не правильный способ выполнения этих перехватов в WCF.

Единственная причина, по которой эта рекомендация работает, заключается в том, что вы размещаетесь в IIS и используете привязки IIS. Тем не менее, службы WCF можно размещать где угодно, и вы можете обнаружить, что вы перемещаете свой сервис в процесс обслуживания, а также изменяете привязки (например, вы можете использовать net-tcp вместо http, в таком случае, как бы вы прочитайте содержимое, входящее в реализацию IHttpModule? Вы не смогли бы), из-за чего эти перехватчики могли бы сломаться.

Сказанное: в идеале вы должны выполнить любую инициализацию перед созданием своего экземпляра ServiceHost. Однако, поскольку у вас нет доступа к экземпляру ServiceHost в WCF в IIS, вам необходимо будет выполнить пользовательские настройки ServiceHostFactory и specify that factory in your svc file (see the section titled Using a Custom ServiceHost in IIS or WAS).. Такой подход сделает его переносимым.

Что касается перехвата вызовов, вы можете сделать это на клиенте и на стороне обслуживания. На стороне клиента вы должны реализовать IClientMessageInspector, а на стороне сервера - IDispatchMessageInspector (предположим, что вы хотите использовать последний).

Для «инжекции» этого инспектора со стороны обслуживания вам необходимо будет использовать поведение конечной точки (которое будет применяться к определенной конечной точке службы, реализация IEndpointBehavior) или поведение службы (что относится к все конечные точки на службе, через реализацию IServiceBehavior interface).

Именно с помощью этих реализаций вы бы посмотрели на ServiceEndpoint (для поведения в конечных точках) или ServiceDescription, чтобы применить реализацию вашего инспектора или любого другого крючка, доступного в WCF.

Вы можете прочитать Paolo Pialorsi's "Writing a WCF Message Inspector" для полного прочтения того, как собрать все это вместе и дать вам представление о пользовательском поведении в WCF.

1

Ну, я не знаю рамки java, но из-за его звуков вы можете искать событие Global.asax HttpApplication.Application_OnStart для инициализации.

И фильтры? Попробуйте IHttpModule.

+0

Извините, но -1, потому что обе эти рекомендации, пока они будут работать в IIS, не являются переносимыми вообще и будут представлять серьезные проблемы, если служба должна быть перенесена за пределы хоста IIS. Есть IIS-агностические способы сделать это в WCF. – casperOne

+0

Я не знаю, что нужно проголосовать, но хороший момент. –