Я изо всех сил пытаюсь найти лучший способ реализовать повторения WCF. Я надеюсь, что клиент будет максимально чистым. Есть два подхода, о которых я знаю (см. Ниже). Мой вопрос: " Есть ли третий подход, который мне не хватает? Возможно, это общепринятый способ сделать это?"
Подход # 1. Создайте прокси-сервер, который реализует интерфейс службы. Для каждого вызова прокси выполните повторные попытки.
public class Proxy : ISomeWcfServiceInterface
{
public int Foo(int snurl)
{
return MakeWcfCall<int>(() => _channel.Foo(snurl));
}
public string Bar(string snuh)
{
return MakeWcfCall<string>(() => _channel.Bar(snuh));
}
private static T MakeWcfCall<T>(Func<T> func)
{
// Invoke the func and implement retries.
}
}
Подход # 2: измените MakeWcfCall() (выше) на общедоступный, и код потребления отправит func напрямую.
То, что мне не нравится в подходе №1, необходимо обновлять класс Proxy каждый раз, когда изменяется интерфейс.
То, что мне не нравится в подходе № 2, заключается в том, что клиент должен завернуть свой вызов в func.
Я пропустил лучший способ?
ИЗМЕНИТЬ
Я разместил здесь ответ (см. ниже) на основе принятого ответа, который указал мне в правильном направлении. Я подумал, что поделился бы своим кодом в ответ, чтобы помочь кому-то работать через то, что мне пришлось проработать. Надеюсь, что это поможет.