【问题标题】:Occasional error on production server: Method <name> is not supported on this proxy生产服务器上的偶发错误:此代理不支持方法 <名称>
【发布时间】:2011-04-04 09:33:52
【问题描述】:

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

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

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

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

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

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

谢谢!

【问题讨论】:

  • 你找到解决这个问题的方法了吗?我们有一个非常相似的问题。
  • 我在使用城堡 wcf 设施时遇到了同样的错误。在 IIS 中重新启动网站可以为我修复它。但我也想要答案。
  • 您如何在客户端上注册您的服务?
  • 我在本地机器上安装 IIS 并从 Visual Studio 进行构建时也遇到此错误。这是我需要在 IIS 中重新启动网站的时候,似乎搞混了。 @Kostassoid 你找到解决方案了吗?
  • @AranMulholland:还没有。我们和您一样认为,必须重新启动 apppool 才能使其恢复工作。但它只发生过一次,所以我们没有任何统计数据。唯一有趣的是,我们同时拥有基于 iis 和 windows-service 的 WCF,只有基于 IIS 的代理失败。

标签: wcf castle-windsor production wcffacility


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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 2018-07-01
    • 2019-05-21
    • 1970-01-01
    相关资源
    最近更新 更多