我使用 WCFnetNamedPipeBinding
和wsHttpBinding
. 我想知道一种单向方法是否可以在不try
ing 的情况下成功执行。
编辑正如有人指出的那样,连接可以在给定的时刻成功并在下一次失败。我不在乎。我只想知道 WCF 是否可以替代try
ing。有什么方法可以检查服务是否已启动且可访问?
我使用 WCFnetNamedPipeBinding
和wsHttpBinding
. 我想知道一种单向方法是否可以在不try
ing 的情况下成功执行。
编辑正如有人指出的那样,连接可以在给定的时刻成功并在下一次失败。我不在乎。我只想知道 WCF 是否可以替代try
ing。有什么方法可以检查服务是否已启动且可访问?
据我所知,确定单向方法是否成功执行的唯一方法是它是否产生异常。
如果该方法不必是单向方法,您可以返回一个布尔值,该值说明该方法是失败还是成功。
我可以问你为什么要这样做吗?如果没有在方法上捕获异常,则无法判断是否确实发生了异常。
如果我误解了您对“尝试”它的使用并且您的意思是没有实际执行该方法,您可以为该方法编写一个代理,该方法实际上不提交操作,只执行处理步骤。
如果您这样做是为了完全测试目的,我建议您利用 Visual Studio 单元测试或将您的项目连接到 NUnit。
如果上述任何一点没有回答您的问题,请提供有关您要完成的工作的更多详细信息。
编辑:修改以说明提问者的澄清。
using(YourService svc = new YourService()){
if(svc.State.Equals(!CommunicationState.Opened)){ /*Handle Error*/ }
svc.InnerChannel.Faulted += new EventHandler(YourFaultedEventHander);
}
将覆盖您以查看连接当前是否打开,并在服务进入故障状态时通知您。这将抢先让您知道调用是否会成功。但是,仍然存在可能导致该特定方法失败的情况。这只会在您可以成功调用服务方法时通知您。
如果您测试调用,它通过,然后以某种方式断开连接并且您的下一个代码块失败,会发生什么?你最好try
ing 它,然后在它出现时处理错误。
没有办法知道对单向操作的调用是否能保证成功;所有绑定都支持单向操作 (AFAIK)。
如果您想简单地确定调用是否是单向操作,那么您将必须遍历服务描述上的操作(您没有指出这是客户端还是服务器端调用)并查看是否操作是不是一种方式。