9

4 个生产服务器中的一个偶尔会产生大量错误声明:

此代理不支持方法 RunRules,如果方法未使用 OperationContractAttribute 标记或接口类型未使用 ServiceContractAttribute 标记,则可能发生这种情况。

“RunRules”方法是wcf [ServiceContract] 接口中的方法之一,它被标记为[OperationContract]。

在这个错误之前,同样的方法,偶尔会通过城堡容器得到错误的服务。在我输入更多日志信息以确定确切原因后,它变成了当前错误。

它是一个错误出来的 web 服务,当发生这种情况时,它会尝试通过 wcf 端点调用 Windows 服务。这只发生在一台特定的机器上。频率约为每周或 2 周一次。一旦 web 服务的回收发生(3 小时),错误就会停止。

对我来说,它几乎就像损坏的 vtable。只是想知道,您将如何解决这个问题?讨厌要求 IT 人员在没有确凿证据的情况下开始重新映像机器。

谢谢!

4

1 回答 1

0

对于这种抽象的魔术错误没有简单的答案,所以尝试记录整个调用堆栈,尤其是内部CastleDLL 调用,如果标准异常不包含如此深入的调用堆栈信息 - 使用反射。

// 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 并尝试分析哪个状态导致具体的执行流程最终出现异常。

如果您能够记录调用堆栈 - 请分享,以便我也可以检查它。

于 2012-04-23T19:27:23.957 回答