【发布时间】:2012-02-23 02:20:26
【问题描述】:
我发现了我的错误。我使用 NHibernate 延迟加载。而且序列化器无法序列化 RoleProxy。
如何从 WCF 服务获取带有 Dictionary 字段的对象? 当我尝试这样做时,我得到了这个异常:
底层连接已关闭:连接已关闭 没想到。
堆栈跟踪:
服务器堆栈跟踪:在 System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(WebException webException, HttpWebRequest 请求, HttpAbortReason abortReason)
在 System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(时间跨度 超时)在 System.ServiceModel.Channels.RequestChannel.Request(消息消息, TimeSpan 超时)在 System.ServiceModel.Dispatcher.RequestChannelBinder.Request(消息 消息,TimeSpan 超时)在 System.ServiceModel.Channels.ServiceChannel.Call(字符串动作, Boolean oneway, ProxyOperationRuntime 操作, Object[] ins, Object[] 出局,TimeSpan 超时)在 System.ServiceModel.Channels.ServiceChannel.Call(字符串动作, Boolean oneway, ProxyOperationRuntime 操作, Object[] ins, 对象 [] 出局)在 System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall,ProxyOperationRuntime 操作)在 System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage 留言)在 [0] 处重新抛出异常:在 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg,IMessage retMsg)在 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(消息数据& msgData,Int32 类型)在 UserManagmentStudio.DataService.IDataService.GetUser() 在 UserManagmentStudio.DataService.DataServiceClient.GetUser() 在 C:\Users\d.kolpakov\documents\visual studio 2010\项目\用户管理工作室\用户管理工作室\服务 References\DataService\Reference.cs:第 64 行,位于 UserManagmentStudio.Controllers.UsersController.Index(UserFilter 过滤器,字符串数据类型)在 C:\Users\d.kolpakov\documents\visual 工作室 2010\Projects\UserManagmentStudio\UserManagmentStudio\Controllers\UsersController.cs:line 29 at lambda_method(Closure, ControllerBase, Object[]) at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase 控制器,对象 [] 参数)在 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext 控制器上下文,IDictionary
2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary2 参数)在 System.Web.Mvc.ControllerActionInvoker.c_DisplayClass15.b_12() 在 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter 过滤器、ActionExecutingContext preContext、Func`1 延续)
服务接口:
[ServiceContract]
public interface IDataService
{
[OperationContract]
User GetUser();
}
用户.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; }
}
.....
}
角色.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; }
}
【问题讨论】:
标签: c# wcf model-view-controller serialization deserialization