WCF和[DATACONTRACT] + [DATAMEMBER]

问题描述

| 我想知道如何将DataContract添加到我的服务中?我的意思是,我知道我必须创建一个类,在其顶部放置[DATACONTRACT],然后在每个成员顶部添加[DATAMEMBER],然后如何将DataContract添加到服务中(我已经有一个[ServiceContract]和在服务上运行的[OperationContract])? 我目前正在以编程方式进行所有操作(没有.config文件)。 一些代码显示了我如何启动和添加OperationContract :(我使用的是.NET 4.0) 服务端:
            using (ServiceHost host = new ServiceHost(typeof(StringReverser),new Uri[]{ new Uri(\"net.tcp://localhost\") }))
            {

                   host.AddServiceEndpoint(typeof(IStringReverser),new NetTcpBinding(),\"TCPReverse\");

                   host.open();
            }
客户端:
        Callbacks myCallbacks = new Callbacks();

        DuplexChannelFactory<IStringReverser> TCPFactory =
           new DuplexChannelFactory<IStringReverser>(
              myCallbacks,new NetTcpBinding());

        TCPFactory.Credentials.Windows.ClientCredential = new System.Net.NetworkCredential(\"username\",\"password\");
        IStringReverser TCPProxy = TCPFactory.CreateChannel();

        Console.WriteLine(\"Client connected\");
提前致谢     

解决方法

您无需在任何地方“添加”数据协定。您只需要使用它作为服务合约或回调合约中任何操作的参数或返回值即可。数据合同定义了作为服务请求或响应的一部分传输的数据。如果服务的任何操作都未使用数据协定,则它显然与服务没有关系(在元数据的情况下,它不包括在内)。 唯一的例外是某些类型已知的高级方案,但在本问题中可能并非如此。     ,DataContracts是传递给您的服务操作的内容。通常,如果您具有复杂类型作为参数,则将使用DataContract属性对其进行修饰。 如果仅将原始类型作为参数进行处理,则DataContract无需修饰。