【发布时间】:2011-07-28 16:36:53
【问题描述】:
我创建了一个 WCF .Net 3.5 Rest 服务,当我通过 IList 接口时它崩溃了。我正在使用 NHibernate 来填充列表。
这是我的代码:
[OperationContract]
[WebGet(UriTemplate = "EconService/GetAllLanguage", ResponseFormat = WebMessageFormat.Json)]
public IList<Language> GetAllLanguage()
{
IList<Language> rtnLang = Language.GetAll();
return rtnLang;
}
这是错误信息:
请求错误
服务器在处理请求时遇到错误。例外 消息是'无法序列化类型的参数 'System.Collections.Generic.List
1[Econcordia.Language]' (for operation 'GetLanguage', contract 'Service1') because it is not the exact type 'System.Collections.Generic.IList1[Econcordia.Language]' 在方法签名中并且不在已知类型集合中。在 为了序列化参数,将类型添加到已知类型 使用 ServiceKnownTypeAttribute 进行操作的集合。'。看 服务器日志以获取更多详细信息。异常堆栈跟踪是:在 System.ServiceModel.Dispatcher.SingleBodyParameterMessageFormatter.ValidateOutputType(Type type, Type parameterType, IList`1 knownTypes)
在 System.ServiceModel.Dispatcher.SingleBodyParameterDataContractMessageFormatter.GetOutputSerializer(类型类型)
在 System.ServiceModel.Dispatcher.SingleBodyParameterMessageFormatter.CreateBodyWriter(对象 身体)
在 System.ServiceModel.Dispatcher.SingleBodyParameterMessageFormatter.SerializeReply(MessageVersion messageVersion, Object[] 参数, Object 结果)
在 System.ServiceModel.Dispatcher.ContentTypeSettingDispatchMessageFormatter.SerializeReply(MessageVersion messageVersion, Object[] 参数, Object 结果)
在 System.ServiceModel.Dispatcher.CompositeDispatchFormatter.SerializeReply(MessageVersion messageVersion, Object[] 参数, Object 结果)
在 System.ServiceModel.Dispatcher.DispatchOperationRuntime.SerializeOutputs(MessageRpc& RPC)
在 System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& RPC)
在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& RPC)
在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& RPC)
在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& RPC)
在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& RPC)
在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& RPC)
在 System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)
任何帮助将不胜感激。
【问题讨论】:
-
我用错误信息编辑了问题。
-
IList真的是一个接口——不是一个对象...... -
我有
[OperationContract]s,它在所有地方都返回IEnumerable<Whatever>,并且没有任何问题。它们在代码中是List<Whatever>或Whatever[],但返回类型在 WCF 中对我来说工作得很好。 -
是的,对不起!我的错。我编辑了问题。
-
@Jesse:完全相同的代码在 .Net 4 上运行,但在 3.5 上运行失败!我不知道为什么。
标签: wcf nhibernate rest asp.net-3.5