Случайная ошибка на рабочем сервере: метод <имя> не поддерживается на этом прокси

Один из 4 производственных серверов время от времени генерирует тонны ошибок, утверждающих:

Метод RunRules не поддерживается на этом прокси, это может произойти, если метод не помечен с помощью OperationContractAttribute или если тип интерфейса не помечен с помощью ServiceContractAttribute.

Метод "RunRules" является одним из методов в интерфейсе wcf [ServiceContract], и он помечен как [OperationContract].

До этой ошибки, в том же методе, иногда он получал неправильный сервис через контейнер замка. После того, как я поместил больше информации журнала, чтобы определить точную причину, она превратилась в текущую ошибку.

Это веб-служба, из которой возникает ошибка, она пытается вызвать службу Windows через конечную точку wcf, когда это происходит. И это происходит только на одной конкретной машине. Частота составляет примерно один раз в неделю или 2 недели. После перезагрузки веб-службы (3 часа) ошибка прекращается.

Для меня это почти как испорченный vtable. Просто интересно, как бы вы подошли к этой проблеме? Ненавижу просить айтишников начать перерисовывать машину без веских доказательств.

Спасибо!

1 ответ

Нет простого ответа на такую ​​абстрактную магическую ошибку, поэтому попробуйте записать весь стек вызовов, особенно внутренний Castle Вызовы DLL, если стандартное исключение не содержит такой глубокой информации о стеке вызовов - используйте рефлексию.

// use this in loop incrementing levelIndex up to st.FrameCount
// to grab all possible callstack entries
StackTrace st = new StackTrace();
st.GetFrame(levelIndex).GetMethod().Name;

Затем с помощью утилиты, подобной ILSpy, разберите Castle DLL и попробуйте проанализировать, какое состояние вызывает конкретный поток выполнения, который заканчивается исключением, которое вы получили.

Если вы можете войти в callstack - пожалуйста, поделитесь, чтобы я также мог проверить это.

Другие вопросы по тегам