【问题标题】:How to detect WCF connectivity without try-catch?如何在没有 try-catch 的情况下检测 WCF 连接?
【发布时间】:2011-02-24 19:47:15
【问题描述】:

我使用 WCF netNamedPipeBindingwsHttpBinding。我想知道一个单向方法是否可以在没有trying 的情况下成功执行。

编辑正如有人指出的那样,连接可以在给定的时刻成功并在下一个失败。我不在乎。我只想知道 WCF 是否可以替代trying。有什么方法可以检查服务是否已启动且可访问?

【问题讨论】:

  • 好的,如果该方法现在启动了怎么办。因此,您调用了该方法,但与此同时它已经下降了?你会让你的应用程序简单地崩溃,还是你会使用 try/catch 块?
  • 在我最初的评论中查看更新。它涵盖了故障状态通知以及确定服务当前状态。

标签: .net wcf http named-pipes isoneway


【解决方案1】:

据我所知,确定单向方法是否成功执行的唯一方法是它是否生成异常。

如果方法不必是单向方法,您可以返回一个布尔值,说明该方法是失败还是成功。

请问您为什么要这样做?如果没有在方法上捕获异常,则无法判断是否发生异常。

如果我误解了您对“尝试”它的使用,并且您的意思是没有实际执行该方法,您可以为该方法编写一个代理,该代理实际上不提交操作,只执行处理步骤。

如果您这样做是为了完全进行测试,我建议您利用 Visual Studio 单元测试或将您的项目连接到 NUnit。

如果以上几点未能回答您的问题,请提供更多详细信息,说明您要完成的工作。

编辑:修改以解释提问者的说明。

using(YourService svc = new YourService()){
    if(svc.State.Equals(!CommunicationState.Opened)){ /*Handle Error*/ } 
    svc.InnerChannel.Faulted += new EventHandler(YourFaultedEventHander); 
}

将覆盖您以查看连接当前是否打开,并在服务进入故障状态时通知您。这将抢先让您知道调用是否会成功。但是,仍然存在可能导致该特定方法失败的情况。这只会在您可以成功调用服务方法时通知您。

【讨论】:

  • 我想知道服务是否启动以及客户端和服务之间是否存在连接。
  • 现在完美的解释,希望在最初的帖子中,我可以回答我最初在上面的编辑中发布的内容 ;-)
  • @VulgarBinary 逻辑否定运算符!不应该放在svc变量之前吗?
【解决方案2】:

如果您测试调用,它通过了,然后以某种方式断开连接并且您的下一个代码块失败,会发生什么情况?你最好trying 它,然后在它出现时处理错误。

【讨论】:

  • 终于有人明白这个问题了
  • 我同意你总是必须处理一个带有捕获的服务调用,但是有一些方法(正如我在我的帖子中提到的)来确定服务的当前状态以及冒泡事件捕获故障状态。无论如何,无论您编码多少预先保护,您都应该始终尝试{...}catch(..){...}您的服务调用。
  • @JaderDias 如果社区无法理解该问题,请考虑该问题可能不适合社区。​​span>
【解决方案3】:

没有办法知道对单向操作的调用是否会保证成功;所有绑定都支持单向操作 (AFAIK)。

如果您想简单地确定调用是否是单向操作,则必须遍历服务描述上的操作(您没有指出这是客户端还是服务器端调用)并查看在操作是否是一种方式。

【讨论】:

  • 我事先知道该操作是否是单向的。我刚才提到它是单向的,因为我只关心连接,而不是服务器是否抛出异常。
  • @Jader Dias:不打电话,你是看不出来的; WCF 中没有内置的“ping”功能。您可以在调用之前调用代理上的Open 方法,但根据绑定,调用可能意味着不同的东西,调用保证的唯一事情是代理可以接收消息.
  • 这不完全正确,是的,Open 调用可能有不同的含义,具体取决于绑定(我想这里的一个适当问题是询问 Jader 正在使用什么绑定),但您可以了解有关服务的更多信息客户无需拨打电话。存在故障事件(包括客户端通道在给定调用之前损坏的情况)并确定通道当前是否打开。正如您所说,这只能保证代理已准备好接收请求......但除了使呼叫失明之外,它仍然提供服务状态。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
  • 2011-08-25
  • 1970-01-01
  • 2011-02-06
  • 2012-10-22
  • 1970-01-01
相关资源
最近更新 更多