问题标签 [faulted]

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 投票
2 回答
17756 浏览

.net - 如何修复有故障的 WCF 通道?

当单个ClientBase<T>实例用于多个 WCF 服务调用时,它会使通道进入故障状态(即,当服务关闭时)。

我想在服务再次启动时自动修复频道。我发现的唯一方法是在每个方法调用之前调用以下代码:

我觉得这不是正确的做法。有人有更好的主意吗?

0 投票
2 回答
7225 浏览

.net - 什么是 System.ServiceModel.Diagnostics.CallbackException,为什么我不能处理它?

在我的 WCF 客户端类中,我正在处理该Faulted()事件,以便如果远程服务引发异常并导致通道出现故障,我至少仍然可以正常关闭它。这是我的代码:

所以我期望客户端可以处理ChannelTerminatedException我手动抛出的内容并向用户发送消息等。相反,我的异常被包裹在System.ServiceModel.Diagnostics.CallbackException. 好的。除了这里有一个问题:这个 CallbackException 在 ServiceModel 库中不存在,我似乎没有办法处理它,除非作为一个 generic Exception,这对我的单元测试没有好处。这到底是怎么回事?我可以以某种方式禁用它并抛出我最初想要的异常吗?

0 投票
1 回答
861 浏览

wcf - WCF 回调错误 - 会话会发生什么?

只是想弄清楚当 WCF 出现问题时会发生什么。我有一个使用 PerSession 的 InstanceContextMode 声明的服务合同的实现......

调用发生如下:

  1. 我的客户端调用服务器并调用 GetServerUTC() 以返回服务器的当前 UTC 时间。这是一种单向调用,服务器将在客户端准备好时回调客户端(在这种情况下简单地返回当前时间!)

  2. 服务器回调到客户端,出于测试目的,在客户端的回调实现中,我抛出了一个异常。

  3. 这在客户端中未处理(出于测试目的),客户端崩溃并关闭。

  4. 在服务器上,我处理 ICommunicationObject 上的故障事件处理程序...

    obj.Faulted += new EventHandler(EventService_Faulted);

问题...

  • 这会终止服务器上当前连接的会话吗?

  • 我想我可以在这种方法中自由地做我想做的事情,例如日志记录或其他东西,但是我应该在这里做任何特定的事情来终止会话还是 WCF 会处理这个?

从最佳实践的角度来看,当回调出错时我应该怎么做?这是否意味着“您的客户发生了某些事情”并且这就是结束还是我在这里遗漏了什么?

此外,是否还有其他我应该处理的故障处理程序。

我已经阅读了很多关于 WCF 的内容,但对于出现问题时该怎么做似乎有点模糊。目前我正在我的客户端上实现一个状态机,它将管理连接并确定用户操作是否会发生,这取决于是否存在与服务器的连接 - 或者这是否是矫枉过正。

任何提示将不胜感激;)

0 投票
1 回答
934 浏览

wcf - WCF 通信主机/客户端。对连接故障无反应

我将此示例用于我的 wcf 服务: http ://www.codeproject.com/KB/IP/WCFWPFChatRoot.aspx?msg=3713905#xx3713905xx

但是如果服务器停止,客户端就不会得到它......

该示例通过以下方式处理它:

但是,如果我停止主机或它崩溃了(ALT+F4),客户端不会得到它。连接状态仍然是“已连接”。

0 投票
1 回答
1467 浏览

wcf - 没有传输安全性的 WCF 可靠会话不会按时发生故障事件

我遇到了一个非常有趣的可靠会话行为。我正在使用 netTcp 绑定 + 双工通道 + 可靠会话。

当我尝试监听 channel.faulted 时,如果将安全模式设置为 transport ,当客户端断开连接时,faulted 事件将立即触发。

但是,当我将绑定的安全模式设置为无或消息时,故障事件不再在相同情况下触发。他们最终会在服务器端出现一半的 ReciveTimeout 故障,我理解这是因为可靠会话会在那时发送心跳消息。

问题是:为什么 wcf 绑定没有按时出错?

这种情况的解决方法是我可以手动“ping”连接。

0 投票
2 回答
21791 浏览

c# - 处理进入故障状态的持久 WCF 客户端

我们有一个从 Web 应用程序使用的 WCF 服务。我们使用的客户端是使用 Visual Studio“添加服务引用”选项生成的。由于它是一个网络应用程序,并且由于应用程序的性质可能会导致会话相对较短,我们选择在用户登录时创建客户端实例并在会话期间保留它,然后在会话结束时处理它。

这让我想到了我的问题——我们正在尝试确定处理客户端通道进入故障状态的最佳方式。在搜索了一些之后,我们想出了这个:

但是,这不起作用,因为至少在我们的情况下,即使服务关闭,客户端也会显示Open状态,直到您实际尝试使用它进行调用,此时它会进入Faulted状态.

所以这让我们做其他事情。我们提出的另一个选择是:

但这闻起来。显然,我们可以通过使用新客户端并在每次调用时处理它来避免这种情况。这似乎没有必要,但如果这是正确的方式,那么我想这就是我们会选择的。那么,优雅地处理确定客户端是否处于故障状态然后采取措施的最佳方法是什么?我们真的应该为每个电话获得一个新客户吗?

要记住的另一件事 - 客户端的实例化以及所有这些检查和处理都发生在客户端的包装类中。如果我们按照我们想要的方式执行此操作,那么它对应用程序本身是透明的——从它们进行调用和处理异常不需要那里的特殊代码。

0 投票
1 回答
2526 浏览

c# - ICommunicationObject.State 不起作用?

你好,

我用 DuplexChannelFactory 创建了我的 WCF 客户端,问题是当我这样做时:

我得到以下异常:

无法在“System.ServiceModel.ICommunicationObject”类型的实例上获取字段或调用方法,因为它是远程对象的代理。

为什么?

我需要检查通道是否出现故障。

编辑1:

0 投票
0 回答
255 浏览

wcf - 断开/故障时是否存在 WCF 客户端事件?

我在 WCF 中使用 netTcpBinding,我想知道,在客户端,它何时断开连接或其通道状态何时出现故障,以便我可以重新连接服务器。

这个想法是使用通道事件创建一个保持活动状态。我知道有可能知​​道客户端使用 Channel.Faulted 事件在服务器端断开/进入故障状态。这样我就可以删除客户端在服务器上的任何订阅。但是,我无法在服务器端重新连接客户端。这正是我想做的。

0 投票
1 回答
1120 浏览

wcf - 在自定义服务通道中关闭和中止

我的客户端正在使用一个抛出异常的 WCF 服务(例外:通信对象 System.ServiceModel.Channels.ServiceChannel 不能用于通信,因为它处于故障状态)。所有后续调用都抛出相同的异常。

我在互联网上读到客户端需要关闭()/中止()通道,这将解决问题。完全正确吗?

另外我正在使用服务开发人员提供的客户 serviceChannel 工厂。当我创建通道时,它不显示关闭和中止方法。那么,当我在客户端创建自定义服务通道实例时,如何获得这些关闭和中止方法呢?

0 投票
1 回答
13135 浏览

windows - 通信对象 System.ServiceModel.Channels.ServiceChannel 不能用于通信,因为它处于故障状态

通信对象 System.ServiceModel.Channels.ServiceChannel 不能用于通信,因为它处于故障状态。

当 Windows 应用程序尝试通过 wsDualHttpBinding 与作为 Windows 服务托管的 WCF 通信时,我收到此错误。WCF 用于通过串行端口与设备通信。Windows 应用程序过去常常通过 WCF windows 服务发送命令。

这是堆栈跟踪:

堆栈跟踪:在 System.ServiceModel.Channels.CommunicationObject.ThrowIfDisposedOrNotOpen() 在 System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout) 在 System .ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

在 [0] 处重新引发异常:在 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) 处的 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) 处 GridSplitter.CommandServiceReference。 ICommandService.SendToMultipleChannel(String[] channel, Int32[][] locid, String cmd, Int32 cmdData) at GridSplitter.CommandServiceReference.CommandServiceClient.SendToMultipleChannel(String[] channel, Int32[][] locid, String cmd, Int32 cmdData) at GridSplitter.MainWindow.bwChkAndSendRedeploy_DoWork(对象发送者,DoWorkEventArgs e):2012 年 11 月 9 日上午 11:05:58

  1. 我不明白为什么服务会进入故障状态。
  2. 我是否应该捕获此异常并执行一些补丁工作(如果推荐)?
  3. TCP 绑定可以帮助我避免/删除此异常吗?