Сделал проект с использованием Web Client Software Factory - очень удобная, надо сказать, штука.
"Прикрутил" к этому проекту MS Ajax Toolkit и столкнулся с тем, что веб-сервисы не обрабатываются ObjectBuilder'ом, соответственно, "достучаться" до контроллера модуля не представляется возможным.
Можно, конечно, явно создавать экземпляр контроллера прямо в веб-сервисе, но это тоже ничего не даст в том случае, если контроллер использует какие-то зарегистрированные сервисы, а обычно это так и есть.
Вторично я столкнулся с той же проблемой когда стал делать HttpHandler для множественной загрузки файлов на сервер. Точно так же нужно было работать с имеющейся инфраструктурой (контроллером модуля, сервисами), ведь не писать же повторно тот же самый код, только в обход общей архитектуры?!
Однако, проблема решилась банально просто.
Для HttpHandlers я сделал примитивный базовый класс, от которого наследуются все конкретные обработчики.
| public abstract class HttpHandlerBase : IHttpHandler |
| { |
| public HttpHandlerBase() |
| { |
| WebClientApplication.BuildItemWithCurrentContext(this); |
| } |
|
| public abstract bool IsReusable { get; } |
|
| public abstract void ProcessRequest(HttpContext context); |
| } |
То есть, в конструкторе экземпяра мы просто "пропускаем" его через ObjectBuilder (WebClientApplication - это класс приложения Web Client Software Factory) и, соответственно, можем пользоваться всей нужной нам инфраструктурой.
То же самое можно сделать и для веб-сервисов.