Способ сделать это - использовать уникальный идентификатор сеанса, связанный с сеансом Http. Из описания кажется, что вы можете захотеть охватить это одним экземпляром HttpApplication, но в этом нет необходимости (вы также можете сохранить сеанс во многих экземплярах приложения). В любом случае этот идентификатор сеанса необходимо каким-либо образом присоединить к каждому запросу Http (либо с файлом cookie, строкой запроса, статической переменной с экземпляром HttpApplication, данными формы). Затем вы сохраняете идентифицирующую информацию о сеансе Http где-нибудь с идентификатором.
Эта идентифицирующая информация может варьироваться в зависимости от ваших потребностей, но может повлечь за собой весь http-запрос или просто некоторое урезанное представление, которое служит вашей конкретной цели.
Использование этого SessionID где-то в запросе Http позволяет вам восстановить любую информацию, которая вам нужна для вызова и взаимодействия с соответствующими службами. Экземпляры сервисов также могут нуждаться в определении области для сеанса.
По сути, я предлагаю, чтобы вы НЕ непосредственно передавали соединение Http внешнему процессу, а вместо этого передавали необходимые данные внешнему процессу и позволяли создать механизм для отправки данных обратного вызова. Я думаю, что изучение шаблона посредника может помочь вам понять, что я имею в виду. http://en.wikipedia.org/wiki/Mediator_pattern. Надеюсь, это поможет.