我有一个WPF客户端,可以调用2个WCF服务。
一项服务仅用于查询,一项服务用于命令(CQS pattern)。
我应该如何调用命令服务?
我在某处读到命令服务中的所有操作必须是“单向”, 因为他们不应该返回任何值。如果出现问题 - 操作应该向客户端抛出'FaultException'。
但是如果这些命令都是单向的 - 我在客户端做什么?
假设我在WPF客户端中有一个“AddProduct”窗口,我输入信息并按“保存”。
我现在在服务中调用'AddProduct(Product)',但是:
感谢。
答案 0 :(得分:1)
我想说选项3是要走的路,但是你可能不需要通用Result
对象来向客户端传达错误。您可能知道,SOAP消息中没有序列化异常,因此您不会在客户端获得任何常见的.NET异常。另一方面,您仍然可以通过在客户端上捕获FaultException
来利用SOAP Faults。因此,如果没有在客户端上发现异常,那么一切都进展顺利。
有关故障异常以及如何将它们用于您的利益的更多信息,请查看:
答案 1 :(得分:1)
我认为使用On-Way很好,但你必须要注意一些单向通话特性。如果您关心并且可以处理服务异常,那么#4是不错的选择。
单向消息 - 一旦客户端发出呼叫,WCF就会生成请求消息,但不会将相关消息返回给客户端。服务端抛出的任何异常都不会传递给客户端。
您应该具备的一点是服务的可靠性,以便您可以确保已将请求发送到服务。
如果没有传输会话(基本或wsHttp绑定),如果在单向操作调用期间发生异常,客户端将不受影响,并且可以继续在同一代理实例上发送调用。
如果存在传输会话 - 服务端异常将使通道出错,因此客户端将无法重新使用代理来发送更多呼叫。这可以为您提供一个选项来发现服务器端是否出现问题(但不是出了什么问题)。虽然,如果服务使用的是FaultContracts,您仍然可以进入客户端不知道出现问题的情况。
当服务抛出服务端故障合同中列出的异常时,这不会使通信通道出现故障,因此使用单向合同的客户端无法检测到通信故障。