Как разрешить клиент-сервису строить сложный объект в сервисе WCF? - PullRequest
0 голосов
/ 28 ноября 2011

Я сделал простой демонстрационный пример PasteBin о том, как выглядит мой код: http://pastebin.com/GpDhPRVm

Мой фактический Process объект чрезвычайно сложен и включает в себя добавление коллекций задач, документов, рабочих процессов и т. Д. В объект Process и настройку свойств с помощью методов и т. Д.

Мой Пример PasteBin настолько прост, насколько я могу сделать, чтобы показать, где что-то сломалось. Включение объекта Process в метод CreateNewProcess в моем сервисе (показано в коде ниже) позволяет пользователю сервиса автоматически «видеть» объект, свойства и перечислители Process в их экземпляре на стороне клиента.

<ServiceContract()>
Public Interface ICreateProcess

    <OperationContract()>
    Sub CreateNewProcess(ByVal newprocess As Process)

End Interface

Тем не менее, он не позволяет им использовать какие-либо методы, такие как метод AddTask (, показанный в примере PasteBin ), и также не предоставляет объекты Task или TaskCollection. , Даже если я декорирую методы с помощью DataContract, OperationContract и т. Д., Они все равно не видны клиентской службе.

Это моя основная проблема: Мне нужна клиентская служба, чтобы иметь возможность полностью "построить" объект Process и затем передать его методу CreateNewProcess.

Еще одно небольшое замечание: (во избежание комментариев, спрашивающих меня об этом), я убедился, что все мои свойства являются простыми типами, которые могут взаимодействовать, так как это должно быть в состоянии работать для Java - не просто .NET клиенты.

1 Ответ

0 голосов
/ 29 ноября 2011

Хорошо, я понял это с небольшой помощью моего приятеля.

Невозможно использовать методы вне класса обслуживания .svc;только свойства, перечисления и подобъекты будут транслироваться клиенту.(Я понял это)

Затем, вместо использования Collection, вы должны использовать общий тип List.

Итак, вместо этого:

    Public Tasks As New TaskCollection() 'where TaskCollection inherits from Collection

Мне нужно было сделать это:

    Public Tasks As List(Of Task)

И клиенту просто нужно будет создать собственный массив задач и присвоить его свойству t.Tasks.

Это работает следующим образомОчарование сейчас: http://pastebin.com/rt8HwsXY

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