1

我使用 WCFnetNamedPipeBindingwsHttpBinding. 我想知道一种单向方法是否可以在不trying 的情况下成功执行。

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

4

3 回答 3

5

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

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

我可以问你为什么要这样做吗?如果没有在方法上捕获异常,则无法判断是否确实发生了异常。

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

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

如果上述任何一点没有回答您的问题,请提供有关您要完成的工作的更多详细信息。

编辑:修改以说明提问者的澄清。

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

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

于 2011-02-24T19:54:59.757 回答
4

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

于 2011-02-24T19:54:31.413 回答
2

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

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

于 2011-02-24T19:52:39.463 回答