WCF内部属性

时间:2009-12-08 21:44:25

标签: c# wcf

我有一个属性的类:

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

我注意到生成代理时。该属性仍然可以设置,即使我已将其标记为内部(我认为它根本不会生成)。

有没有办法实现我的目标?我希望能够从服务方面设置属性。但不允许客户端能够设置属性。

3 个答案:

答案 0 :(得分:0)

与服务合同一样,DataContracts / DataMembers上的访问修饰符不起任何作用,实质上毫无意义:(

答案 1 :(得分:0)

如果没有get和set,则无法通过WCF跃点进行序列化和反序列化。

您可以在服务逻辑中实现您想要做的事情。

答案 2 :(得分:0)

WCF合同上的[DataMember]只是数据协定上的数据字段 - XML架构。实际上,在处理WCF消息时,.NET setter和getter visibility修饰符是无关紧要的。

如果您的字段具有[DataMember]属性,它将成为数据协定的XML模式的一部分 - 并且客户端无法知道它在服务器端具有“内部”设置器 - 它只是XSD数据合同。

.NET和WCF是两个截然不同的独立世界 - 当您的客户端调用WCF服务时,它只是基于SOAP的消息传递 - 这里有 .NET基于对象的互动!您没有从客户端向服务器伸出手来调用服务器端对象上的方法 - 在这种情况下,可能会出现.NET可见性说明符。您的客户端创建一条消息并将其发送到服务器,然后服务器从该消息重新组装(服务器端)对象 - 哎呀,甚至还有基于SMTP(电子邮件!)的WCF传输!

双方共享的唯一合同是合同 - 服务方法的服务/运营合同,以及传递数据的基于XML模式的数据合同。 XML模式中没有基于.NET的可见性规范的概念。