标签: communicationexception

System.Net.WebException:请求已中止:请求已取消

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

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

System.ServiceModel.CommunicationException:通过http通道传输数据时发生错误:(请求已中止:请求已取消.)

和:

System.Net.WebException:请求已中止:请求已取消.

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

我看到的另一个选项是向服务添加自定义绑定而不是BasicHttpBinding我们现在使用的,但是这会对那些使用webReference的人(因为CustomBinding没有启用SOAP)的后端支持Web服务.

有没有人以前处理过这个错误?有没有办法在不影响服务器端的情况下禁用WCF中的keep alive?是否还有其他任何可以导致此错误的活着?

.net wcf service-reference system.net.webexception communicationexception

14
推荐指数
2
解决办法
3万
查看次数

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

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

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

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

以下是事件序列:

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

我需要的是让客户端连接保持打开,以便客户知道他们的服务方法成功完成.现在他们只是获得了一个封闭的连接,并且不知道服务方法是否成功完成.在使用WCF之前,我使用套接字并且能够通过直接控制Socket来实现.(即在仍然执行接收和发送时停止接受循环)

关闭主机HTTP端口非常重要,以便上游防火墙可以将流量定向到另一个主机系统,但现有连接保持打开状态以允许现有方法调用完成.

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

我尝试过的事情:

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

谢谢

编辑:不幸的是,我无法实现系统正在关闭的应用程序级别的建议响应,因为该领域的客户端已经部署.(我只控制服务,而不是客户端)

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

编辑:我还没有找到我想要的完整解决方案,但Benjamin建议在输入服务方法之前使用IMessageDispatchInspector拒绝请求.

c# wcf basichttpbinding communicationexception

11
推荐指数
1
解决办法
3176
查看次数

在WCF中具有"无法识别的序列"消息的CommunicationException

我在使用WCF服务时遇到了CommunicationException.消息是:

远程端点不再识别此序列.这很可能是由于远程端点中止.wsrm:Identifier的值不是已知的Sequence标识符.可靠的会议出了问题.

调用契约方法后,会抛出异常.在调用contract方法之前,通道状态是Opened.我捕获此异常后恢复我的服务客户端,并且一段时间它工作正常.但是这个错误再次发生.似乎超出了一些超时,但我无法理解究竟是哪一个.

我使用带有reliableSession的wsHttpBinding.InactivityTimeout设置为半小时,我确信它没有被超过,因为异常被提前抛出.

c# wcf sequence communicationexception

9
推荐指数
1
解决办法
8755
查看次数

CommunicationException [Root 异常是 ConnectException: Connection timed out]

我在尝试连接 Active Directory 时偶尔会遇到此异常。

javax.naming.CommunicationException: <ServerIP>:<PORT> 
  [Root exception is java.net.ConnectException: Connection timed out: connect]
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

    DirContext ctx = null;
    Properties env = new Properties();

    env.put(Context.SECURITY_PRINCIPAL, <Bind_USER>);
    env.put(Context.SECURITY_CREDENTIALS, <Bind_USER_PWD>);
    env.put(Context.PROVIDER_URL, "ldap://<ServerIP>:<PORT>");            
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");

    ctx = new InitialDirContext(env);
Run Code Online (Sandbox Code Playgroud)

在此行中获取连接超时异常ctx = new InitialDirContext(env);。它不会每次都发生,但经常发生。

请告诉我,如何摆脱这个问题?

java runtime-error ldap communicationexception connectexception

5
推荐指数
1
解决办法
3万
查看次数

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

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

<resource-ref>
    <res-ref-name>jdbc/OrdiniWebDS</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
Run Code Online (Sandbox Code Playgroud)

在context.xml(tomcat conf)中:

<Resource 
  auth="Container" 
  driverClassName="com.mysql.jdbc.Driver" 
  maxActive="100" 
  maxIdle="30" 
  maxWait="10000" 
  name="jdbc/OrdiniWebDS" 
  password="[mypassword]" 
  type="javax.sql.DataSource" 
  url="jdbc:mysql://[myHost:port]/ordiniweb" 
  username="[myusername]"
 />
Run Code Online (Sandbox Code Playgroud)

该数据库是MySql 5.0.一切都运作良好,除了有时,经过几个小时的"不使用",在第一次访问时,我得到了这个例外:

com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: 

** BEGIN NESTED EXCEPTION ** 

java.io.EOFException

STACKTRACE:

java.io.EOFException
 at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1956)
 at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2368)
 at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2867)
 at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1616)
 at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1708)
 at com.mysql.jdbc.Connection.execSQL(Connection.java:3255)
 at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1293)
 at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1428)
 at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:93)
 at com.blasetti.ordiniweb.dao.OrdiniDAO.caricaOrdine(OrdiniDAO.java:263)
...
** END NESTED EXCEPTION **



Last packet sent to the server was 0 ms ago.
 com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2579)
 com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2867)
 com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1616)
 com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1708) …
Run Code Online (Sandbox Code Playgroud)

jdbc tomcat5.5 communicationexception

3
推荐指数
1
解决办法
2万
查看次数

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

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

Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.DatabaseException

Internal Exception: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet successfully received from the server was 51,460 milliseconds ago.  The last packet sent successfully to the server was 0 milliseconds ago.
Error Code: 0
Run Code Online (Sandbox Code Playgroud)

如何防止此异常?肯定是try, catch在这里,但不知道在哪里放.当我em.createNamedQuery还是em.remove,我试图抓住com.mysql.jdbc.exceptions.jdbc4.CommunicationsException,但我得到了一个错误说:Exception com.mysql.jdbc.exceptions.jdbc4.CommunicationsException is never thrown in body of corresponding try statement.

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

这是我的 EJB

@Stateless
@LocalBean
public class DocumentSBean {
    @PersistenceContext …
Run Code Online (Sandbox Code Playgroud)

jsf jpa exception-handling java-ee communicationexception

2
推荐指数
1
解决办法
2942
查看次数