2009-12-08 64 views
0

我有一類與房產:WCF內部屬性

[DataMember] 
public bool MyProp { get; internal set;} 

我注意到,當生成代理。即使我把它標記爲內部屬性(我認爲它根本不會生成),該屬性仍然可以設置。

有沒有辦法實現我正在嘗試的?我希望能夠從服務方面設置屬性。但不允許客戶端能夠設置屬性。

回答

0

WCF契約上的一個[DataMember]只是數據契約上的一個數據字段 - 一個XML模式.NET setter和getter visibility修飾符是在處理WCF消息時無關緊要,

如果您的字段具有[DataMember]屬性,它將成爲數據協定的XML模式的一部分,並且客戶端無法知道它在服務器端具有「內部」設置器 - 它只是XSD數據的一部分合同。

.NET和WCF是兩個非常不同的和獨立的世界 - 當你的客戶端調用WCF服務,這是一個基於SOAP的消息只有通過 - 有沒有基於.NET的對象交互!你沒有從客戶端向服務器伸出頭來調用服務器端對象的方法 - 在這種情況下,.NET可見性說明符會起作用。您的客戶端創建一條消息並將其發送給服務器,服務器然後從該消息中重新組裝(服務器端)對象 - 甚至還有一個基於SMTP(電子郵件!)的WCF傳輸!

雙方共享的唯一契約是服務方法的服務/操作契約,以及傳遞數據的基於XML架構的數據契約。在XML模式中沒有基於.NET的可視化規範的概念。

0

與服務合同,對DataContracts訪問修飾符/數據成員沒有起到任何作用,在本質上是毫無意義:(

0

沒有一個get和set,你不能序列化和反序列化在WCF一跳。

你可以在你的服務的邏輯中實現你想要做的事