WCF и возврат Custom Collection - PullRequest
       0

WCF и возврат Custom Collection

1 голос
/ 23 января 2011

Как любой метод приложения WCF может возвращать пользовательскую коллекцию в вызывающую среду.Пожалуйста, помогите с примером кода.

спасибо.

Ответы [ 2 ]

0 голосов
/ 23 января 2011

Если я не msitaken, это во многом зависит от того, используете ли вы сгенерированные ядром прокси на клиенте, или используете совместное использование сборок (используя один и тот же код на сервере и клиенте). С прокси - просто: вы не можете - они являются просто поверхностными объектами, представляющими публичное состояние. Все, что у вас есть в mex / wsdl - это «набор элементов типа X», который слой code-gen интерпретирует (в зависимости от вашей конфигурации) как List<T>, ObservableCollection<T> и т. Д.

Если вы используете совместное использование сборок, вы должны уже иметь правильные типы на клиенте, поэтому он должен просто работать - но это менее чисто с точки зрения абстракции. Лучше избегать использования общедоступного API, но хорошо для внутренних приложений, использующих общую платформу.

0 голосов
/ 23 января 2011

Прежде всего, вам нужно определить интерфейс как ServiceContract и метод, который возвращает Custom Collection как OperationContract.Я дам вам код на VB.net, bus очень и очень легко перевести его на 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

И затем вам необходимо настроить 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 (POCOClients) (или что вы хотите).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...