wcf - WPF 客户端 - 我应该在后台线程中调用 WCF 服务吗?

标签 wcf command-query-separation

我有一个 WPF 客户端,可以调用 2 个 WCF 服务。

一项服务仅用于查询,一项服务用于命令 ( CQS pattern )。

我应该如何调用命令服务?

我在某处读到命令服务中的所有操作必须是“单向”,
因为它们不应该返回任何值。如果出现问题 - 操作应该向客户端抛出“FaultException”。

但是如果命令都是单向的 - 我在客户端做什么?

假设我在 WPF 客户端中有一个“AddProduct”窗口,我输入信息并按“保存”。

我现在在服务中调用“AddProduct(Product)”,但是:

  • 它应该关闭窗口吗?
  • 是否应该等待 10 秒以查看是否没有任何 FaultException ?
  • 应操作不是 是“单向”?如果是这样 - 命令服务中的所有操作是否应该返回某种类型的带有“成功”或“失败”的通用“结果”对象?
  • 如果第 3 部分是"is" - 我是否应该在单独的线程中调用该服务并“禁用”窗口上的所有控件,直到我从该服务获得响应?

  • 谢谢。

    最佳答案

    我会说选项 3 是可行的方法,但您可能不需要通用 Result对象将错误传达给客户端。您可能知道,异常不会在 SOAP 消息中序列化,因此您不会在客户端收到任何常见的 .NET 异常。另一方面,您仍然可以通过捕获 FaultException 来利用 SOAP 错误。在客户端上。因此,如果客户端没有捕获异常,则一切顺利。

    有关故障异常的更多信息以及如何使用它们为您带来好处,请查看:

    Specifying and Handling Faults in Contracts and Services

    关于wcf - WPF 客户端 - 我应该在后台线程中调用 WCF 服务吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10562695/

    相关文章:

    c# - 编辑时防止重复编辑/锁定数据库记录 - 单个后端服务器

    c# - ASP.NET MVC + WF + WCF + SERVICE LAYER 我如何在一个项目中使用这些?

    c# - Microsoft ServiceBus - 参数实体名称为 null 或为空

    c# - 当命令需要结果数据时,如何应用命令查询分离 (CQS)?

    command-query-separation - 命令查询分离 : commands must return void?

    c# - 在 WCF 中,具有多个操作契约更好还是只有一个具有多态数据契约的操作更好?

    asp.net-mvc - 将 HttpContext.Current.User.Identity 传递给 WCF

    command-query-separation - 为什么CQS原则要求Command不返回任何值?

    java - Spring - 将自定义实例传递给构造函数

    domain-driven-design - 在领域驱动设计的 CQRS 实现中为命令/查询单独应用服务?