WCF和[DATACONTRACT] + [DATAMEMBER]

时间:2011-05-24 13:41:54

标签: c# 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");

提前致谢

2 个答案:

答案 0 :(得分:0)

您无需在任何地方“添加”数据合同。您只需将其用作服务合同或回调合同中任何操作的参数或返回值。数据协定定义作为服务请求或响应的一部分传输的数据。如果数据合同未被服务的任何操作使用,则它显然与服务无关(如果元数据不包括在内)。

唯一的例外是一些已知类型的高级方案,但在这个问题中可能不是这种情况。

答案 1 :(得分:0)

DataContracts是传递给您服务操作的内容。通常,如果您将复杂类型作为参数,则将使用DataContract属性修饰它们。

如果您只处理基本类型作为参数,则无需使用DataContract进行装饰。