Вы вызываете сериализатор для рекурсии:
public class TestClass
{
private ServiceController _serviceController;
[DataMember]
public ServiceController MyServiceController
{
get { return ServiceController.GetServices()[0]; // <-- this returns your service
}
}
Служба, которую вы возвращаете, это IRdbmsService
, которая возвращает TestClass
. Затем его необходимо сериализовать и т. Д.
Редактировать: Уточнить:
Когда TestClass сериализуется, сериализатор просматривает все его свойства DataMember
, одним из которых является ServiceController
. Затем он сериализует это свойство, что делает это на get
:
return ServiceController.GetServices()[0];
Поскольку IRdbmsService
- единственная служба, определенная в вашей области, она находится в индексе 0 в ответе на вызов GetServices
, поэтому ее необходимо сериализовать. Поскольку тип возвращаемого значения GetServiceControllerList
равен TestClass
, необходимо затем сериализовать TestClass
, что возвращает нас к началу (отсюда и рекурсия).
Что касается решения этой проблемы, это зависит от того, что вы пытаетесь сделать. В данный момент этот сервис возвращает информацию о себе вызывающей стороне, что для меня не имеет смысла; звонящий уже имеет эту информацию во время потребления (до совершения звонка). Можете ли вы уточнить свои намерения?