WCF并返回Custom集合

时间:2011-01-23 09:50:52

标签: .net wpf wcf

WCF应用程序的任何方法如何将自定义集合返回给调用环境。 请帮助您提供示例代码。

感谢。

2 个答案:

答案 0 :(得分:0)

首先,您需要将接口定义为ServiceContract,并将Custom Collection作为OperationContract返回。我会在VB.net中给你代码,总线非常容易将它翻译成c#

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

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

End Interface

这里,IList(POCOClients)是自定义集合。然后,实现界面。

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

然后,您需要在Service.ServiceModel部分中配置app.config以公开WCF服务:

    

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

现在,当客户端调用该服务时,将返回IList(Of POCOClients)(或任何您想要的)的自定义集合。

答案 1 :(得分:0)

除非我被告知,否则很大程度上取决于您是在客户端使用核心生成的代理,还是使用程序集共享(在服务器和客户端使用相同的代码)。使用代理 - 简单地说:你不能 - 他们是只是浅层对象代表公共状态。你在mex / wsdl中拥有的只是“一组X类型的项目”,代码层将解释(取决于你的配置)为List<T>ObservableCollection<T>等。

如果您正在使用程序集共享,那么已经在客户端具有正确的类型,因此它应该正常工作 - 但这在抽象方面不那么纯粹。最好避免使用公共API,但对于共享平台的内部应用程序则可以。