2011-05-24 85 views
0

我想知道如何将DataContract添加到我的服务?我的意思是,我知道我必须创建一个类,将[DATACONTRACT]放在它的顶部,然后在每个成员的顶部添加[DATAMEMBER],然后如何将DataContract添加到服务中(我已经有一个[ServiceContract]和[OperationContract]在服务上运行)?WCF和[DATACONTRACT] + [DATAMEMBER]

我正在做一切programmaticaly在此刻(没有.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"); 

在此先感谢

回答

0

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

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

+0

好吧,如果我没有错,我不需要任何DataContract和DataMember,如果我使用简单的类型,我可以将它们作为参数或通过返回值传递,并且工作正常。但是,如果我想要使用复杂类型,则必须添加DataContract和DataMember才能够执行与简单类型相同的操作 感谢您回答如此之快! – John 2011-05-24 14:01:28

0

DataContracts是传递给您的服务的操作。一般来说,如果你有复杂的类型作为参数,你会用DataContract属性来修饰它们。

如果只处理原始类型作为参数,则不需要使用DataContract进行修饰。