WCF-修改响应消息

WCF-修改响应消息,wcf,Wcf,我的WCF服务有一个名为ProductResponseMessage的消息约定 此消息包含一个数据协定ProductResponse,该协定又包含许多数据成员 其中一个数据契约是Person,它有一个数据成员SocialSecurityNumber。这是一个11位数的数字。此person对象可能存在于其他数据契约中 我的要求是,我不会一直向客户显示11位数字。如果客户端有权查看完整的11位数字(每个客户端配置为yes no)或其他,则应显示为最后6位数字,并用x填充。(如54645xxxxx)

我的WCF服务有一个名为
ProductResponseMessage
的消息约定

此消息包含一个数据协定
ProductResponse
,该协定又包含许多数据成员

其中一个数据契约是
Person
,它有一个数据成员
SocialSecurityNumber
。这是一个11位数的数字。此person对象可能存在于其他数据契约中

我的要求是,我不会一直向客户显示11位数字。如果客户端有权查看完整的11位数字(每个客户端配置为yes no)或其他,则应显示为最后6位数字,并用x填充。(如54645xxxxx)

这个SSN值来自数据库,我需要服务中的完整数字以用于各种用途

在WCF中这样做的正确方法是什么?我读过关于信息检查员的文章

我需要用它吗?或者还有其他方法吗?

一种方法是:

  • 你的WCF服务不在乎——它总是返回完整的11位数字
  • 您的前端(网站、Winforms应用程序-无论您拥有什么)处理显示或抑制SSN编号的问题
这使您的服务变得最简单—它始终只返回数据

如果您想更改此设置,那么我认为您必须在调用服务时向服务发送一些指示(例如,作为请求中的
[MessageHeader]
元素),告知服务要做什么-返回全部11位数字,只返回部分数字,或者什么都不返回。如果执行此操作,请在服务代码(实现服务合同的代码)中进行处理

更新:好的,所以您需要服务来做出决定。在这种情况下,我可能会这样做:

  • 在我的服务中将完整的SSN检索到一个私有变量中-您说过您需要为各种事情完整的SSN
  • 有一个名为
    DisplaySSN
    或其他东西(字符串)的属性
  • 根据随请求传入的用户名,确定
    DisplaySSN
    可以是什么(完整的SSN,部分被
    XXXX
    遮住了,什么都没有),并相应地设置该属性

因此,我肯定会立即在服务端执行此操作-不要使用消息检查器(可能存在,也可能不存在…)处理此操作。

我不希望网站处理此操作。我的服务必须根据为请求标头中传递的每个用户名定义的配置数据库来决定此操作。