2011-05-24 106 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進行修飾。