我们是微软的商店,只使用C#。我们有一个Windows服务,它运行并向我们的一个生产应用程序服务器发送WCF SOAP请求。这些应用程序服务器依次向第三方SOAP端点发出呼叫。在我们的Windows服务日志中,我们开始注意到一些似乎在重试时成功的java.util.ConcurrentModificationException
个异常。 java.util.ConcurrentModificationException
是一个Java语言异常,所以我最初的想法是我们调用的第三方SOAP端点之一是用Java编写的并且返回了该异常。然后,我们在try-catch中包装对第三方服务的所有调用,并抛出一个新的包装器异常,其中包含在发生异常时调用哪个端点的描述,以及向其添加内部异常。
但是,执行此操作后,我们仍然看到在没有外部包装器异常的情况下抛出相同的异常,因此在调用第三方服务时不会发生这种情况。我们的C#代码所做的唯一其他事情是使用System.Data
程序集从SQL数据库中读取,我相信它是用C#(或C ++)而不是Java编写的。
异常堆栈跟踪在Windows服务的功能处结束,以调用应用程序服务器;我们在Windows服务上捕获的异常的堆栈跟踪中看不到任何应用程序服务器代码。此外,这个错误似乎间歇性地发生,当有大量流量时,我猜测,因此重现起来并不容易。在每天成千上万的请求中,我们可能会看到它发生了50次。
所以我对此异常的来源感到茫然。我们的生产负载均衡器(F5)和/或防火墙产品(Cisco ASA)可能是用java编写的,但我不希望他们的异常细节泄漏到我看到的异常中;我宁愿期待常规的C#“连接失败/丢失”异常。
我们的应用服务器是使用IIS 8的Windows 2012 R2,我们正在运行ASP.Net WCF SOAP服务。
任何想法/想法都表示赞赏。感谢。
事实证明,我们有一些代码实际上解开了原始异常,然后用截断的堆栈跟踪将其抛回。所以问题源于调用用Java编写的第三方服务;我们只是对我们的错误处理做了一些愚蠢的事情。神秘解决了。