Автоматическая отправка сообщения в WCF

Я использую WCF для общения с веб-службой Java. Эта веб-служба имеет метод под названием Аутентификация, который возвращает идентификатор сеанса. Каждый запрос этой веб-службы должен содержать этот идентификатор сеанса в заголовке SOAP. Если один сеанс тайм-аута, вызов любого метода приводит к возврату SoapException. Я бы хотел:

  • Перехватить каждый вызов, сделанный в веб-службе,
  • Проверьте ответное сообщение для данного исключения.
  • Если найдено, снова вызовите Authenticate, чтобы получить новый идентификатор сеанса, и снова отправьте исходное сообщение с обновленным идентификатором сеанса

У меня Googled это безрезультатно. Самое близкое, что я мог найти, сказал мне, что я мог бы выполнить это на канальном уровне, но вообще не приводил код примера.

Обратите внимание, что я хочу сделать это в прокси-классе, а не в коде, вызывающем класс прокси. Таким образом, вызывающим абонентам класса proxy не нужно беспокоиться о автоматической повторной аутентификации. Я наследую от автоматически сгенерированного прокси и программирует WCF программно.

Ответ 1

Я бы попытался обернуть "getter" для вашего клиента WCF таким образом, чтобы перед всеми вызовами вызывалась функция аутентификации.

    public WCFClient GetServiceInstance()
    {
        client.DoAuth();
        return client;
    }

Вы также можете добавить условие к этому методу только для вызова DoAuth() каждые 1 минуту или около того.