2012-01-18 132 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