2011-01-23 70 views

回答

0

首先,您需要將接口定義爲ServiceContract以及將Custom Collection作爲OperationContract返回的方法。我會給你在VB.net代碼,公交車是非常非常容易把它翻譯成C#

Imports System.ServiceModel 
<ServiceContract()> 
Public Interface IClientContract 

    <OperationContract()> 
    Function GetClientList() As IList(Of POCOClients) 

End Interface 

這裏,(POCOClients的)的IList的是自定義集合。然後,執行界面。

Public Class ClientContractImplementation 
    Implements IClientContract 

    Private ClientOp As IClientsOperations 

    Sub New() 
'I use a IoC container here, but you can make a standar New() at this point' 
     ClientOp = BLIoC.Container.Resolve(Of IClientsOperations)() 
    End Sub 

    Public Function GetClientList() As System.Collections.Generic.IList(Of ServiceLayerContract.POCOClients) Implements ServiceLayerContract.IClientContract.GetClientList 

     Return ClientOp.SearchClients() 

    End Function 
End Class 

而且,那麼你需要配置的app.config揭露WCF服務,在Service.ServiceModel部分:

</endpoint> 
<endpoint address="mex" binding="mexHttpBinding" name="MEX" contract="IMetadataExchange"/> 
<host> 
    <baseAddresses> 
    <add baseAddress="http://localhost:81/Client"/> 
    </baseAddresses> 
</host> 

現在時,一個客戶調用服務,IList(Of POCOClients)(或任何你想要的)的定製集合將被返回。

0

除非我認識,否則很大程度上取決於您是在客戶端使用核心生成代理還是使用程序集共享(在服務器和客戶端使用相同的代碼)。使用代理 - 簡單地說:你不能 - 它們是只是代表公共狀態的淺層對象。所有你在MEX/WSDL已經是「一組X型的項目」,該代碼生成層解釋(取決於您condiguration)爲List<T>ObservableCollection<T>

如果使用裝配共享,你應該已經在客戶端有正確的類型,所以它應該只是工作 - 但這在抽象方面不太純。最好避免使用公共API,但適用於共享平臺的內部應用程序。