问题标签 [communicationexception]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2311 浏览

wcf - 在 WCF 服务中引发异常会引发 CommunicationException

每当我在我的服务中抛出一个异常时,它之后就会抛出另一个异常:

我正在实现 IErrorHandler 所以我可以记录(使用 log4net)所有未处理的异常:

知道为什么吗?

0 投票
8 回答
3495 浏览

c# - WCF,BasicHttpBinding:停止新连接但允许现有连接继续

.NET 3.5、VS2008、使用 BasicHttpBinding 的 WCF 服务

我有一个托管在 Windows 服务中的 WCF 服务。当 Windows 服务因升级、定期维护等原因关闭时,我需要优雅地关闭我的 WCF 服务。WCF 服务的方法最多可能需要几秒钟才能完成,典型的量是每秒 2-5 次方法调用。我需要以允许任何先前调用方法完成的方式关闭 WCF 服务,同时拒绝任何新调用。通过这种方式,我可以在约 5-10 秒内达到安静状态,然后完成我的 Windows 服务的关闭周期。

调用ServiceHost.Close似乎是正确的方法,但它会立即关闭客户端连接,而无需等待任何正在进行的方法完成。我的 WCF 服务完成了它的方法,但是没有人可以发送响应,因为客户端已经断开连接。这是this question建议的解决方案。

以下是事件的顺序:

  1. 客户端调用服务上的方法,使用 VS 生成的代理类
  2. 服务开始执行服务方法
  3. 服务收到关闭请求
  4. 服务调用 ServiceHost.Close(或 BeginClose)
  5. 客户端断开连接,并收到 System.ServiceModel.CommunicationException
  6. 服务完成服务方法。
  7. 最终服务检测到它没有更多工作要做(通过应用程序逻辑)并终止。

我需要的是让客户端连接保持打开状态,以便客户端知道他们的服务方法已成功完成。现在他们只是得到一个关闭的连接,不知道服务方法是否成功完成。在使用 WCF 之前,我使用的是套接字,并且能够通过直接控制套接字来做到这一点。(即在仍在进行接收和发送的同时停止接受循环)

关闭主机 HTTP 端口很重要,这样上游防火墙可以将流量引导到另一个主机系统,但现有连接保持打开状态以允许完成现有方法调用。

有没有办法在 WCF 中实现这一点?

我尝试过的事情:

  1. ServiceHost.Close() - 立即关闭客户端
  2. ServiceHost.ChannelDispatchers - 在每个上调用 Listener.Close() - 似乎没有做任何事情
  3. ServiceHost.ChannelDispatchers - 在每个上调用 CloseInput() - 立即关闭客户端
  4. Override ServiceHost.OnClosing() - 让我延迟关闭,直到我决定可以关闭,但在此期间允许新连接
  5. 使用此处描述的技术删除端点。这抹杀了一切。
  6. 运行网络嗅探器以观察 ServiceHost.Close()。主机只是关闭连接,没有响应发送。

谢谢

编辑:不幸的是,我无法实现系统正在关闭的应用程序级咨询响应,因为现场的客户端已经部署。(我只控制服务,不控制客户端)

编辑:我使用 Redgate Reflector 来查看 Microsoft 的 ServiceHost.Close 实现。不幸的是,它调用了一些internal我的代码无法访问的辅助类。

编辑:我还没有找到我正在寻找的完整解决方案,但本杰明建议使用 IMessageDispatchInspector 在进入服务方法之前拒绝请求最接近。

0 投票
2 回答
2777 浏览

asp.net - WCF 响应太长 - 身份验证错误

在我目前工作的项目中,公开了一个 WCF 服务,它返回一个业务实体的数组,我们称之为 Invoice :

使用的身份验证机制是 Windows 身份验证,WCF 服务托管在 IIS 6 上托管的 Web 应用程序中。

起初,当我用来获取超过 64kB 的数据时,会抛出 CommunicationException,指出“已超出传入消息的最大消息大小配额 (65536)。要增加配额,请在适当的绑定元素上使用 MaxReceivedMessageSize 属性。”

好吧,我只是在 App.config 中将 maxReceivedMessageSize 和 maxBufferSize 的值增加到 65536000(我在末尾公然添加了三个零)(后者是因为它在 ArgumentException 中抱怨“对于 TransferMode.Buffered,MaxReceivedMessageSize 和 MaxBufferSize 必须是相同的值。参数名称:bindingElement")。

现在我可以收到更大的回应......

直到我达到另一个限制(我认为),在 624 个元素(大约 2.2 MB)之后,抛出了一个奇怪的异常:

服务器堆栈跟踪:

在 [0] 处重新抛出异常:

对经过身份验证的响应有限制吗?ASP.NET 设置有限制吗?

0 投票
4 回答
9398 浏览

c# - WCF 中带有“无法识别的序列”消息的 CommunicationException

使用 WCF 服务时出现 CommunicationException。消息是:

远程端点不再识别此序列。这很可能是由于远程端点上的中止。wsrm:Identifier 的值不是已知的序列标识符。可靠会话出现故障。

调用合约方法后会立即引发异常。在调用合约方法之前,通道状态为 Opened。捕获此异常后,我恢复了我的服务客户端,并且在一段时间内它工作正常。但随后再次发生此错误。似乎超过了一些超时,但我不明白到底是哪一个。

我使用启用了可靠会话的 wsHttpBinding。InactivityTimeout 设置为半小时,我确定它没有超过,因为提前抛出异常。

0 投票
1 回答
4080 浏览

wcf - 关于 WCF 的奇怪错误 - System.ServiceModel.CommunicationException 未处理

我创建了一个简单的 WCF 演示:服务器端:

客户端:

然后,运行 ServerSide,当我尝试运行 CLientSide 时,我收到以下错误消息:接收对http://locahost:8000/HelloIndigo/HelloIndigoService 的 HTTP 响应时发生错误。这可能是由于服务端点绑定未使用 HTTP 协议。这也可能是由于服务器中止了 HTTP 请求上下文(可能是由于服务关闭)。有关更多详细信息,请参阅服务器日志。

以及错误详情:

0 投票
5 回答
35564 浏览

.net - System.Net.WebException:请求被中止:请求被取消

我有一个 WCF 服务在负载条件下一直给我这个错误(否则我似乎无法重新创建错误)。我们一直在尝试找到解决它大约一周的方法,但没有这样的运气......

我看到的错误有两个部分,

System.ServiceModel.CommunicationException: An error: (The request was aborted: the request was cancelled.) 在通过 http 通道传输数据时发生。

和:

System.Net.WebException:请求被中止:请求被取消。

我看到很多人建议通过重载Reference.cs文件中的方法和设置来禁用保持活动KeepAlive = false,但是,我们的客户端正在使用服务引用(除了 Web 引用),并且此选项不再存在。

我见过的另一个选择是向服务添加自定义绑定,而不是BasicHttpBinding我们现在使用的,但这会妨碍那些一直使用 webReference 的人对 web 服务的向后支持(因为CustomBinding没有启用 SOAP)。

有没有人处理过这个错误?有没有办法在不影响服务器端的情况下禁用 WCF 中的保持活动?是否还有其他已知会导致此错误的保持活动?

0 投票
3 回答
3024 浏览

jsf - JavaEE6:如何在数据库关闭时保护 Web 应用程序

首先,我的框架是带有 JSF、托管 bean、EJB 和 JPA 的 Java EE 6。我编写了一个简单的程序来从数据库中查询信息。因此,当我单击一个按钮时,它会触发一个托管 bean 的事件,其中事件侦听器方法将访问 EJB 方法。selectEJB 方法将对实体进行简单查询。如果数据库在 I 之前或期间关闭select,则会出现异常

如何避免此异常?绝对是try, catch这里,但不知道放在哪里。当我做em.createNamedQueryorem.remove时,我尝试捕捉com.mysql.jdbc.exceptions.jdbc4.CommunicationsException,但我得到一个错误说:Exception com.mysql.jdbc.exceptions.jdbc4.CommunicationsException is never thrown in body of corresponding try statement

以下是我的代码,我将在哪里捕获异常?

这是我的EJB

这是我的ManagedBean


编辑

我尝试了下面列出的两种方式,但仍然在萤火虫上返回状态 200 而不是 500

或者

这是 setDisplayFacility()

0 投票
1 回答
18876 浏览

jdbc - 由于以下原因导致通信链接失败:java.io.EOFException

我的 webapp 在 Tomcat 5.5 上运行,我在 web.xml 中声明了数据源:

在 context.xml (tomcat conf) 中:

数据库是MySql 5.0。一切正常,除了有时,在“未使用”几个小时后,第一次访问时我得到了这个异常:

我需要刷新,它再次运行良好。任何的想法?谢谢。

0 投票
1 回答
3662 浏览

wcf - 如何解决 WCF CommunicationException 未处理

我有一些问题。

问题是CommunicationException错误。

错误信息是

接收对http://localhost:18080/WCFServices/TestService的 HTTP 响应时出错 。这可能是由于服务端点绑定未使用 HTTP 协议。这也可能是由于服务器中止了 HTTP 请求上下文(可能是由于服务关闭)。有关更多详细信息,请参阅服务器日志。

我在下面写了源代码。

错误信息出现在倾斜词上方。

我想同步主应用程序和客户端应用程序。

上面的错误是客户端应用程序。

我的 app.config 文件是

附言。临时修改TestService

请任何人。

谢谢。

哦抱歉,“电压”发生错误

我试图增加最大尺寸和长度。

但是,它并没有解决这个问题。

来人帮帮我。

0 投票
0 回答
354 浏览

communicationexception - OpenJMS:上下文创建失败并出现 InvalideClassException

我将 OpenJMS 与 NetBeans 6.9.1 一起使用。我在其中创建了一个简单的 NetBeans 平台应用程序和一个模块。我已经使用它的 startup.bat 文件启动了我的 openjms-0.7.7-beta。现在在模块中执行以下代码以开始侦听有关主题的消息。

该代码在一个简单的 java 应用程序中运行良好,但在此配置中它失败了;

这是例外

在我看来,这个客户端代码向 openJMS 服务器发送了一个“org.exolab.jms.server.net.RemoteNamingProvider__Proxy”类的对象。该类位于代码和 openJMS 服务器使用的同一 JAR 文件中。然而,出于某种奇怪的原因,编译该类在服务器端具有不同的序列号。

我在网上搜索了线索。如果我们使用不同的编译器,一个类的序列号可能会不同。我不知道 openJMS 服务器是否使用我计算机上安装的 Java SE 编译器以外的编译器。但是,我确信 NetBeans 正在使用它(Java SE 编译器)来编译这个客户端代码。

其次,我不能显式地将序列 ID 分配给导致异常的类,因为它在 openJMS 库中,而不是我自己的类中。

任何帮助将不胜感激。

——哈代图拉