【问题标题】:WCF and return Custom collectionWCF 并返回自定义集合
【发布时间】:2011-01-23 09:50:52
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: .net wpf wcf


    【解决方案1】:

    首先,您需要将接口定义为ServiceContract,并将返回自定义集合的方法定义为OperationContract。我会给你VB.net中的代码,bus很容易翻译成c#

    Imports System.ServiceModel
    <ServiceContract()>
    Public Interface IClientContract
    
        <OperationContract()>
        Function GetClientList() As IList(Of POCOClients)
    
    End Interface
    

    这里,IList(of 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)(或任何您想要的)的自定义集合。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2015-07-15
        • 1970-01-01
        • 1970-01-01
        • 2015-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-29
        • 1970-01-01
        相关资源
        最近更新 更多