Я нашел свою ошибку.Я использую NHibernate ленивая загрузка.И сериализатор не может сериализовать RoleProxy.
Как получить объект с полем Dictionary из службы WCF?Когда я пытаюсь это сделать, я получаю следующее исключение:
Основное соединение было закрыто: соединение было неожиданно закрыто.
Трассировка стека:
Трассировка стека сервера: в System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException (WebException webException, запрос HttpWebRequest, HttpAbortReason abortReason)
в Time.ChannelReceptionSystem.ServiceModel.Channels.RequestChannel.Request (сообщение-сообщение, время ожидания TimeSpan) в System.ServiceModel.Dispatcher.RequestChannelBinder.Request (сообщение-сообщение, время ожидания TimeSpan) в System.ServiceModel.Channels.ServiceChannel.Call (действие String on, BooleОперация ProxyOperationRuntime, Object [] ins, Object [] outs, TimeSpan timeout) в System.ServiceModel.Channels.ServiceChannel.Call (действие String, логический односторонний вызов, операция ProxyOperationRuntime, Object [] ins, Object [] outs) вSystem.ServiceModel.Channels.ServiceChannelProxy.InvokeService (метод IMethodCallMessageCall, операция ProxyOperationRuntime) в System.ServiceModel.Channels.ServiceChannelProxy.Invoke (сообщение IMessage)
исключительное время восстановления:Proxies.RealProxy.HandleReturnMessage (IMessage reqMsg, IMessage retMsg) в System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke (тип MessageData & msgData, Int32) в UserManagmentStudio.DataService.IDataererService.GataTerviceServiceServiceServiceServiceServiceService ()) в C: \ Users \ d.kolpakov \ documents \ visual studio 2010 \ Projects \ UserManagmentStudio \ UserManagmentStudio \ Ссылки на службы \ DataService \ Reference.cs: строка 64 в UserManagmentStudio.Controllers.UsersController.Index (фильтр UserFilter, String dataType) вC: \ Users \ d.kolpakov \ documents \ visual studio 2010 \ Projects \ UserManagmentStudio \ UserManagmentStudio \ Controllers \ UsersController.cs: строка 29 в lambda_method (закрытие, ControllerBase, Object []) вSystem.Web.Mvc.ActionMethodDispatcher.Execute (контроллер ControllerBase, параметры Object []) в System.Web.Mvc.ReflectedActionDescriptor.Execute (параметры ControllerContext controllerContext, IDictionary 2 parameters) at
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext
controllerContext, ActionDescriptor actionDescriptor, IDictionary
2) в System.Web.Mvc.ControllerActionInvoker.>c_ DisplayClass15.b _12 () в System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter (фильтр IActionFilter, ActionExecutingContext preContext, продолжение Func`1)
Сервисный интерфейс:
1022 *
User.cs:
[DataContract(IsReference = true)]
public class User : IValidatableObject
{
[DataMember]
private readonly IDictionary<Role,AccessLevel> roles = new Dictionary<Role,AccessLevel>();
public virtual IDictionary<Role,AccessLevel> Roles
{
get { return roles; }
}
.....
}
Role.cs:
[DataContract(IsReference = true)]
public class Role
{
private readonly IDictionary<User, AccessLevel> users = new Dictionary<User, AccessLevel>();
[DataMember]
public virtual Int32 Id { get; set; }
[DataMember]
public virtual String Name { get; set; }
public virtual IDictionary<User,AccessLevel> Users
{
get { return users; }
}
}
AccessLevel.cs:
[DataContract(IsReference = true)]
public class AccessLevel
{
[DataMember]
public virtual Int32 Id { get; set; }
[DataMember]
public virtual String Value { get; set; }
}