2012-01-18 129 views
0

我的WCF服务有一个名为ProductResponseMessage的消息协定。WCF - 修改响应消息

此消息包含数据合约ProductResponse,该数据合约又包含许多数据成员。

其中一份数据合同是Person其中有一个数据成员SocialSecurityNumber。这是一个11位数字。此人物可能存在于其他数据合同中。

我的要求是,我不假设所有的时间都显示11位数字给客户端。如果客户端有权查看完整的11位数字(每个客户端配置为“否”),否则应显示为最后6位数字填充x。 (如54645XXXXXX)。

此SSN值来自数据库,我需要我的服务内的完整号码用于各种目的。

WCF做这件事的正确方法是什么?我已阅读关于消息检查员。

我需要使用它吗?或者有没有其他方法呢?

回答

1

一种选择是:

  • WCF服务并不关心 - 它总是返回完整的11位
  • 您的前端(网站,Winforms应用程序 - 不管你有)与交易显示或抑制SSN号码

这使您的服务最简单 - 它只是一直返回数据。

如果你想改变这一点,那么我想你会调用它时的一些指示发送到您的服务(例如,在你的要求[MessageHeader]元素),告诉服务做什么 - 返回整11位数字,只有它的一部分,或根本没有。如果您这样做,请在服务代码(实现您的服务合同的代码)中处理。

更新:好的,所以你想服务做出这个决定。在这种情况下,我可能会做这样的:

  • 检索完整的SSN入我的服务私有变量 - 你说你需要充分SSN各种事情反正
  • 有一个属性叫做DisplaySSN或某事(串)
  • 根据与请求传入的用户名,确定哪些是DisplaySSN可(全SSN,部分“昏”了与XXXX,什么都没有),并相应设置该属性

所以我肯定会马上在服务端做到这一点 - 不要使用消息检查器(可能在那里或可能不是......)处理它

+0

我不希望网站来处理this.My服务必须根据请求头中传递的每个用户名的配置定义数据库来决定。 – Shetty 2012-01-18 11:59:04

+0

@Shetty:更新了我的回复 – 2012-01-18 12:09:44

+0

感谢marc_s。我会检查这一点。 – Shetty 2012-01-18 12:20:26