C# 返回的包含WCF的信息性消息

C# 返回的包含WCF的信息性消息,c#,wcf,messages,C#,Wcf,Messages,这个问题是关于“信息性消息”,并让它们以一致的方式从“后端”流向“前端”。快速的问题是“你是如何做到的”? 背景: 使用WCF调用后端服务的Web应用程序 在后端服务中,可能会出现“消息”。现在,这个“消息”的原因可能有很多,但是在本次讨论中,我们假设查看了一段数据,并确定应该向调用者返回一些关于它的信息 此“信息”消息可能在保存期间出现,也可能在检索信息期间出现。同样,信息在这里并不重要,而是在许多不同的场景下,有一些信息要反馈 从团队的角度来看,我们都希望始终以标准的方式返回这些“消息”。现

这个问题是关于“信息性消息”,并让它们以一致的方式从“后端”流向“前端”。快速的问题是“你是如何做到的”?

背景:

使用WCF调用后端服务的Web应用程序

在后端服务中,可能会出现“消息”。现在,这个“消息”的原因可能有很多,但是在本次讨论中,我们假设查看了一段数据,并确定应该向调用者返回一些关于它的信息

此“信息”消息可能在保存期间出现,也可能在检索信息期间出现。同样,信息在这里并不重要,而是在许多不同的场景下,有一些信息要反馈

从团队的角度来看,我们都希望始终以标准的方式返回这些“消息”。现在,在过去,这种“标准方式”是由不同的人以不同的方式完成的

以下是一些可能性:

1) 每个操作的末尾都有一个包含这些消息的“ref”参数

2) 每个方法都会返回这些消息……但是,这种方法只适用于“Save”方法,因为人们会认为“Retrieve”方法应该返回实际数据而不是消息

3) 一些使用调用上下文的方法,以避免用某些东西“污染”所有消息签名;然而,随着WCF的出现,事情变得复杂了。也就是说,返回到消息头上

问题:
那么回到我的问题上来……其他人是如何通过WCF通过应用程序的各个层将上述信息返回给调用方的?

我认为基本上有两种方法可以做到这一点:

  • InfoMessage:string
    字段添加到所有DataContracts中,该字段可以保留(或不保留)来自服务器的信息性消息

  • 如果您不想将其放入DataContracts,那么在消息返回到客户端之前,在服务器上创建一个填充的头,在客户端上,您可以检查该头并检索它(如果存在)

  • 为了自动向WCF消息添加头,通常使用MessageInspector的机制—可以通过操作契约上的属性配置或添加的小块代码,将头添加到一端,并检查该头的传入消息(如果存在,则提取它)在另一端

    有许多非常好的博客文章向您展示了如何创建消息检查器:

    • 理查德·哈格伦的
    这些主要是从一个客户端到另一个服务器,例如,客户端为服务发送带有一些“元信息”的头文件,但反过来也可以正常工作

    查看要实现的两个相关接口:

    • 在客户端,有一个要实现的
      BeforeSendRequest
      AfterReceiveReply
      消息
    • 在服务器端,它有一个
      AfterReceiveRequest
      BeforeSendReply
      方法来实现