当前位置:  开发笔记 > 编程语言 > 正文

WCF中的DataContract有什么意义?

如何解决《WCF中的DataContract有什么意义?》经验,为你挑选了3个好方法。

VS.net在您创建WCF项目时创建模板.

它为iService1.cs文件添加了一个类:

// Use a data contract as illustrated in the sample below to
// add composite types to service operations.
[DataContract]
public class CompositeType
{
    bool boolValue = true;
    string stringValue = "Hello ";

    [DataMember]
    public bool BoolValue
    {
        get { return boolValue; }
        set { boolValue = value; }
    }

    [DataMember]
    public string StringValue
    {
        get { return stringValue; }
        set { stringValue = value; }
    }
}

由于WCF服务可以返回任何用户定义的类,为什么要使用DataContract和CompositeType类?

我可以返回类似的东西:

 [OperationContract]
MyUserCollection GetUsers();

我错过了什么?



1> Guy Starbuck..:

DataContract只是一种可以在服务边界两侧理解的类型的正式定义.

如果在示例中返回"MyUserCollection"对象,则服务的使用者将需要引用服务/系统的内部,这违反了明确边界的SOA原则.通过使用DataContract,您将以松散耦合的方式发布返回类型的结构.


我的WCF被我编写的应用程序所使用,因此在所有实际应用中都应该没问题(使SOA发挥作用).你同意吗?

2> Wagner Silve..:

另一个有趣的事情是,如果您使用DataContract修饰代码,您可以对客户端可以看到的内容进行大量控制,并且必须将其发送回您的服务.例如:

[DataContract]
public class SampleClass
{
    [DataMember(IsRequired=true)]
    public int MyRequiredProperty { get; set; }

    [DataMember]
    public int MyOptionalProperty { get; set; }

    public int MyInternalProperty { get; set; }
}

在上面的示例中,您定义了在接收数据时,您必须具有MyRequiredProperty,并且您可以拥有或不拥有MyOptionalProperty.此外,客户端永远不会看到MyInternalProperty(例如,这可能是一些内部有助于您的逻辑的属性,但您不希望它在客户端级别公开).



3> Asif Mushtaq..:

还有另一个重要用途,您可以更改类和属性的名称.在序列化和反序列化过程中,它是一个方便的功能.

[DataContract(Name="EmployeeName")]
public class Person
{
   [DataMember(Name="FullName")]
   public string Name { get; set; }

   [DataMember(Name="HomeAddress")]
   public string Address { get; set; }
}

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有