生产服务器偶尔出现错误:该代理不支持<name>方法。

9

有4个生产服务器之一偶尔会生成大量错误,声称:

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

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

在出现此错误之前,在同一方法中,它偶尔会通过城堡容器获取错误的服务。在我添加了更多日志信息以确定确切原因之后,它变异成了当前的错误。

这是一个Web服务,当它发生时,它尝试通过wcf端点调用Windows服务。而且只会在一台特定的机器上发生。频率约为一周或两周一次。一旦Web服务的循环使用(3小时),错误就会停止。

对我来说,这几乎像是损坏的虚函数表。只是想知道,您如何解决这个问题?不想要求IT人员在没有充分证据的情况下重新映像机器。

谢谢!


1
你找到解决这个问题的方法了吗?我们遇到了非常类似的问题。 - Kostassoid
1
我在使用Castle WCF Facility时遇到了相同的错误。重新启动IIS中的网站可以解决这个问题。但是我也想知道答案。 - Aran Mulholland
我在本地机器上安装了IIS并从Visual Studio进行构建时也遇到了这个错误。这是因为我需要在IIS中重新启动网站,似乎出现了混淆。@Kostassoid,你找到解决方案了吗? - Aran Mulholland
@AranMulholland:还没有。我们和你一样,不得不重新启动apppool才能让它恢复正常工作。但这只发生了一次,所以我们没有任何统计数据。唯一有趣的是,我们有基于IIS和Windows服务的WCF,只有基于IIS的代理失败了。 - Kostassoid
@PetarVucetin 当我们遇到这个错误时,我们在服务端使用WindsorSevcieHostFactory,并且在客户端使用wcf设施来解决服务。 - Aran Mulholland
显示剩余3条评论
1个回答

0
对于这种抽象的魔法错误,没有简单的答案,因此尝试记录整个调用堆栈,特别是内部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并尝试分析导致具体执行流程的状态,最终导致您遇到异常的原因。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接