请考虑以下dataContract类。 MyHiddenProperty
是可选的DataMember
-
[DataContract]
public class CompositeType
{
string stringValue = "Hello ";
[DataMember]
public string StringValue
{
get { return stringValue; }
set { stringValue = value; }
}
[IgnoreDataMember] //for IRestricted
[DataMember]//for IAllowed
public string MyHiddenProperty { get; set; }
}
我需要确保MyHiddenProperty
仅在一个端点公开,而在另一个端点受限制。
为此,我创建了两个不同的Service Contract
,
[ServiceContract]
public interface IAllowed
{
[OperationContract]
string GetData(int value);
[OperationContract]
//would expose MyHiddenProperty
CompositeType GetDataUsingDataContract(CompositeType composite);
}
[ServiceContract]
public interface IRestricted
{
[OperationContract]
string GetData(int value);
[OperationContract]
//should not expose MyHiddenProperty
CompositeType GetDataUsingDataContract(CompositeType composite);
}
通过以下方式展示它们 -
<endpoint address="allowedEndpoint" binding="basicHttpBinding" contract="WcfServiceLibrary1.IAllowed">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="restrictedEndPoint" binding="basicHttpBinding" contract="WcfServiceLibrary1.IRestricted">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
我理解WCF Authorization
机制可以帮助限制对特定操作的访问。
在dataContract
级别应用限制似乎有点棘手。我们可以在这种情况下利用WCF可扩展性点吗?