问题标签 [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.
wcf - 在 WCF 服务中引发异常会引发 CommunicationException
每当我在我的服务中抛出一个异常时,它之后就会抛出另一个异常:
我正在实现 IErrorHandler 所以我可以记录(使用 log4net)所有未处理的异常:
知道为什么吗?
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建议的解决方案。
以下是事件的顺序:
- 客户端调用服务上的方法,使用 VS 生成的代理类
- 服务开始执行服务方法
- 服务收到关闭请求
- 服务调用 ServiceHost.Close(或 BeginClose)
- 客户端断开连接,并收到 System.ServiceModel.CommunicationException
- 服务完成服务方法。
- 最终服务检测到它没有更多工作要做(通过应用程序逻辑)并终止。
我需要的是让客户端连接保持打开状态,以便客户端知道他们的服务方法已成功完成。现在他们只是得到一个关闭的连接,不知道服务方法是否成功完成。在使用 WCF 之前,我使用的是套接字,并且能够通过直接控制套接字来做到这一点。(即在仍在进行接收和发送的同时停止接受循环)
关闭主机 HTTP 端口很重要,这样上游防火墙可以将流量引导到另一个主机系统,但现有连接保持打开状态以允许完成现有方法调用。
有没有办法在 WCF 中实现这一点?
我尝试过的事情:
- ServiceHost.Close() - 立即关闭客户端
- ServiceHost.ChannelDispatchers - 在每个上调用 Listener.Close() - 似乎没有做任何事情
- ServiceHost.ChannelDispatchers - 在每个上调用 CloseInput() - 立即关闭客户端
- Override ServiceHost.OnClosing() - 让我延迟关闭,直到我决定可以关闭,但在此期间允许新连接
- 使用此处描述的技术删除端点。这抹杀了一切。
- 运行网络嗅探器以观察 ServiceHost.Close()。主机只是关闭连接,没有响应发送。
谢谢
编辑:不幸的是,我无法实现系统正在关闭的应用程序级咨询响应,因为现场的客户端已经部署。(我只控制服务,不控制客户端)
编辑:我使用 Redgate Reflector 来查看 Microsoft 的 ServiceHost.Close 实现。不幸的是,它调用了一些internal
我的代码无法访问的辅助类。
编辑:我还没有找到我正在寻找的完整解决方案,但本杰明建议使用 IMessageDispatchInspector 在进入服务方法之前拒绝请求最接近。
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 设置有限制吗?
c# - WCF 中带有“无法识别的序列”消息的 CommunicationException
使用 WCF 服务时出现 CommunicationException。消息是:
远程端点不再识别此序列。这很可能是由于远程端点上的中止。wsrm:Identifier 的值不是已知的序列标识符。可靠会话出现故障。
调用合约方法后会立即引发异常。在调用合约方法之前,通道状态为 Opened。捕获此异常后,我恢复了我的服务客户端,并且在一段时间内它工作正常。但随后再次发生此错误。似乎超过了一些超时,但我不明白到底是哪一个。
我使用启用了可靠会话的 wsHttpBinding。InactivityTimeout 设置为半小时,我确定它没有超过,因为提前抛出异常。
wcf - 关于 WCF 的奇怪错误 - System.ServiceModel.CommunicationException 未处理
我创建了一个简单的 WCF 演示:服务器端:
客户端:
然后,运行 ServerSide,当我尝试运行 CLientSide 时,我收到以下错误消息:接收对http://locahost:8000/HelloIndigo/HelloIndigoService 的 HTTP 响应时发生错误。这可能是由于服务端点绑定未使用 HTTP 协议。这也可能是由于服务器中止了 HTTP 请求上下文(可能是由于服务关闭)。有关更多详细信息,请参阅服务器日志。
以及错误详情:
.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 中的保持活动?是否还有其他已知会导致此错误的保持活动?
jsf - JavaEE6:如何在数据库关闭时保护 Web 应用程序
首先,我的框架是带有 JSF、托管 bean、EJB 和 JPA 的 Java EE 6。我编写了一个简单的程序来从数据库中查询信息。因此,当我单击一个按钮时,它会触发一个托管 bean 的事件,其中事件侦听器方法将访问 EJB 方法。select
EJB 方法将对实体进行简单查询。如果数据库在 I 之前或期间关闭select
,则会出现异常
如何避免此异常?绝对是try, catch
这里,但不知道放在哪里。当我做em.createNamedQuery
orem.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()
jdbc - 由于以下原因导致通信链接失败:java.io.EOFException
我的 webapp 在 Tomcat 5.5 上运行,我在 web.xml 中声明了数据源:
在 context.xml (tomcat conf) 中:
数据库是MySql 5.0。一切正常,除了有时,在“未使用”几个小时后,第一次访问时我得到了这个异常:
我需要刷新,它再次运行良好。任何的想法?谢谢。
wcf - 如何解决 WCF CommunicationException 未处理
我有一些问题。
问题是CommunicationException
错误。
错误信息是
接收对http://localhost:18080/WCFServices/TestService的 HTTP 响应时出错 。这可能是由于服务端点绑定未使用 HTTP 协议。这也可能是由于服务器中止了 HTTP 请求上下文(可能是由于服务关闭)。有关更多详细信息,请参阅服务器日志。
我在下面写了源代码。
错误信息出现在倾斜词上方。
我想同步主应用程序和客户端应用程序。
上面的错误是客户端应用程序。
我的 app.config 文件是
附言。临时修改TestService
请任何人。
谢谢。
哦抱歉,“电压”发生错误
我试图增加最大尺寸和长度。
但是,它并没有解决这个问题。
来人帮帮我。
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 库中,而不是我自己的类中。
任何帮助将不胜感激。
——哈代图拉