2011-01-23 48 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,但适用于共享平台的内部应用程序。